解析xml以获取两个节点之间的所有节点

Posted

技术标签:

【中文标题】解析xml以获取两个节点之间的所有节点【英文标题】:Parsing xml to get the all nodes between two nodes 【发布时间】:2019-04-19 05:56:30 【问题描述】:

您好,我有一个如下的 xml:

>     <body>
>         <p>
> 
>             <xxx>
>                 <txt><txt>
>             </xxx>
>             <Err type="Start"/>
>             <xxx>
>                 <txt>f</txt>
>             </xxx>
>             <xxx>
>                 <txt>irst_name</txt>
>             </xxx>
>             <Err type="End"/>
>             <xxx>
>                 <txt></txt>
>             </xxx>
>         <p> </body>

所以我试图在

&lt;Err type="Start"/&gt; .... &lt;Err type="End"/&gt;

然后提取txt节点值得到“firstName”的输出

这是我目前所拥有的,但在此之后有点失落,请帮助。

xml =  $(mainXMl).find('p')
    $(xml).each(function(wPrgs)
       var parentEle = $(xml[wPrgs]).find('Err')
           $(parentEle).each(function(childEle)
             $.each(this.attributes, function(i, attrib) 
                   if(attrib.name === "type" && attrib.value === "Start")
                       var end= childEle===parentEle.length-1 ? parentEle.nextSibling : parentEle[childEle+1];
                     // what goes here  ?????

                    
               );
           );
           );
);

【问题讨论】:

【参考方案1】:

不确定 xml 结构,但我认为我们可以使用 xml2json 之类的模块来有效地将 xml 解析为 json/object 结构并使用 json 进行下一步操作。例如如果我们考虑下面的xml,

<root>  
 <xxx>
     <txt></txt>
 </xxx>
 <Err type="Start"/>
 <xxx>
     <txt>f</txt>
 </xxx>
 <xxx>
     <txt>irst_name</txt>
 </xxx>
 <Err type="End"/>
 <xxx>
     <txt></txt>
 </xxx>
</root>

转换成 json 的代码是,

  var jsonObj = xml2json(xmlInput);
  console.log(JSON.stringify(jsonObj, undefined, 4));

输出将是,


    "root": 
        "xxx": [
            
                "txt": ""
            ,
            
                "txt": "f"
            ,
            
                "txt": "irst_name"
            ,
            
                "txt": ""
            
        ],
        "Err": [
            
                "type": "Start"
            ,
            
                "type": "End"
            
        ]
    

【讨论】:

以上是关于解析xml以获取两个节点之间的所有节点的主要内容,如果未能解决你的问题,请参考以下文章

dom4j解析xml重复节点

Scala 解析 XML获取相应的值

java解析xml文件,会把节点属性中的换行转换成空格,怎样才能避免此类转换,即保留换行

Python3 解析 XML

GroovyXml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 )

php如何解析多级xml报文?