以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]XML解析  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=183854)

--  作者:洮沙
--  发布时间:2022/11/16 11:24:00
--  [求助]XML解析
老师,麻烦问一下如何解析以下格式xml数据(计划提取发票代码等信息):
<?xml version="1.0" encoding="UTF-8"?>
-<ofd:OFD Version="1.1" DocType="OFD" xmlns:ofd="http://www.ofdspec.org/2016">
  -<ofd:DocBody>
      -<ofd:DocInfo>
           <ofd:DocID>b6ae35f487e448bba27cb391fc7b840d</ofd:DocID>
           <ofd:Author>China Tax</ofd:Author>
           <ofd:CreationDate>2022-11-07</ofd:CreationDate>
         -<ofd:CustomDatas>
                 <ofd:CustomData Name="template-version">1.0.20.0422</ofd:CustomData>
                 <ofd:CustomData Name="native-producer">SuwellFormSDK</ofd:CustomData>
                 <ofd:CustomData Name="producer-version">1.0.20.0603</ofd:CustomData>
                 <ofd:CustomData Name="发票代码">062001</ofd:CustomData>
                 <ofd:CustomData Name="发票号码">77610</ofd:CustomData>
                 <ofd:CustomData Name="合计税额">***</ofd:CustomData>
                 <ofd:CustomData Name="合计金额">362</ofd:CustomData>
                 <ofd:CustomData Name="开票日期">2022年11月07日</ofd:CustomData>
                 <ofd:CustomData Name="校验码">17431 86442 88824 2</ofd:CustomData>
                 <ofd:CustomData Name="购买方纳税人识别号">91622922MA73</ofd:CustomData>
                 <ofd:CustomData Name="销售方纳税人识别号">93621202MA73</ofd:CustomData>
              </ofd:CustomDatas>
           </ofd:DocInfo>
         <ofd:DocRoot>Doc_0/Document.xml</ofd:DocRoot>
         <ofd:Signatures>Doc_0/Signs/Signatures.xml</ofd:Signatures>
     </ofd:DocBody>
</ofd:OFD>
帮助文件:http://www.foxtable.com/mobilehelp/topics/0171.htm
看了半天没有看懂,麻烦老师指导一下,谢谢!
[此贴子已经被作者于2022/11/16 11:25:07编辑过]

--  作者:有点蓝
--  发布时间:2022/11/16 11:30:00
--  
转换为json。然后按json的方式取值即可

Dim xml As String = "<xml><to>George</to><from>John</from><content>Don\'t forget the meeting!</content></xml>"
Dim xo As Foxtable.XObject = Foxtable.XObject.Parse(xml)
Output.Show(xo.ToString)

--  作者:洮沙
--  发布时间:2022/11/16 12:47:00
--  
‘蓝老师,运行不起来,麻烦再给修改一下,谢谢!
Dim fl As String = "E:\\开发的程序\\出纳日记账\\Reports\\2022111612372327553\\OFD.XML"
Dim xml As String = FileSys.ReadAllText(FL)
Dim xo As Foxtable.XObject = Foxtable.XObject.Parse(xml)
Output.Show(xo.ToString)
Dim json As String = xo.ToString
Dim jo As JObject = JObject.Parse(json)
For Each jt As JToken In jo("ofd:CustomData")
    Output.Show(jt("@Name").ToString & "|" & jt("#text").ToString)
Next


图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20221116124654.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2022/11/16 13:30:00
--  
Output.Show(xo.ToString)显示什么内容?
--  作者:洮沙
--  发布时间:2022/11/16 13:35:00
--  
{
  "@xmlns:ofd": "http://www.ofdspec.org/2016",
  "@DocType": "OFD",
  "@Version": "1.1",
  "ofd:DocBody": {
    "ofd:DocInfo": {
      "ofd:DocID": "b6ae35f487e448bba27cb391fc7b840d",
      "ofd:Author": "China Tax",
      "ofd:CreationDate": "2022-11-07",
      "ofd:CustomDatas": {
        "ofd:CustomData": [
          {
            "@Name": "template-version",
            "#text": "1.0.20.0422"
          },
          {
            "@Name": "native-producer",
            "#text": "SuwellFormSDK"
          },
          {
            "@Name": "producer-version",
            "#text": "1.0.20.0603"
          },
          {
            "@Name": "发票代码",
            "#text": "06200190"
          },
          {
            "@Name": "发票号码",
            "#text": "77610"
          },
          {
            "@Name": "合计税额",
            "#text": "***"
          },
          {
            "@Name": "合计金额",
            "#text": "3625.00"
          },
          {
            "@Name": "开票日期",
            "#text": "2022年11月07日"
          },
          {
            "@Name": "校验码",
            "#text": "17431 86442 8882"
          },
          {
            "@Name": "购买方纳税人识别号",
            "#text": "916922MA73J85"
          },
          {
            "@Name": "销售方纳税人识别号",
            "#text": "9362134H0D7L"
          }
        ]
      }
    },
    "ofd:DocRoot": "Doc_0/Document.xml",
    "ofd:Signatures": "Doc_0/Signs/Signatures.xml"
  }
}


--  作者:有点蓝
--  发布时间:2022/11/16 14:17:00
--  
和普通的json解析没有区别啊,一层一层的取值:http://www.foxtable.com/mobilehelp/topics/0252.htm

Dim fl As String = "E:\\开发的程序\\出纳日记账\\Reports\\2022111612372327553\\OFD.XML"
Dim xml As String = FileSys.ReadAllText(FL)
Dim xo As Foxtable.XObject = Foxtable.XObject.Parse(xml)
For Each jt As JToken In xo("ofd:DocBody")("ofd:DocInfo")("ofd:CustomDatas")("ofd:CustomData")
    Output.Show(jt("@Name").ToString & "|" & jt("#text").ToString)
Next

--  作者:洮沙
--  发布时间:2022/11/16 14:45:00
--  
感谢蓝版,明知道是嵌套格式,功力不够,看的眼花缭乱!