【问题标题】:Xpath parsing issueXpath解析问题
【发布时间】:2015-11-11 09:18:44
【问题描述】:

我正在尝试找到正确的 xPath 字符串来解析这个 XML 示例。目前,由于“自闭”元素,我无法获得它。

这是我正在处理的 XML 的一部分。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <SOAP-ENV:Body>
      <getRecordsResponse xmlns="http://www.dummy.com">
         <getRecordsResult>
            <business_duration/>
            <calculation_complete>1</calculation_complete>
            <definition>0050aedb58064100ad1a7198c9974545</definition>
            <duration/>
            <end/>
            <field/>
            <field_value>PRODUKTIE</field_value>
            <id>b5f520716fae82001c41df971e3ee4e3</id>
            <start/>
            <sys_created_by>system</sys_created_by>
            <sys_created_on>2015-09-17 13:21:36</sys_created_on>
            <sys_id>0006a479c8a68200a7ffccf9faada3ce</sys_id>
            <sys_mod_count>0</sys_mod_count>
            <sys_updated_by>system</sys_updated_by>
            <sys_updated_on>2015-09-17 13:21:36</sys_updated_on>
            <table>cmdb_ci_db_ora_instance</table>
            <u_created_on_last_7_days>0</u_created_on_last_7_days>
            <u_old_value/>
            <u_uummss>152136</u_uummss>
            <u_yyyymmdd>20150917</u_yyyymmdd>
            <value>PRODUKTIE</value>
         </getRecordsResult>
      </getRecordsResponse>      
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

问题在于“&lt;u_old_value/&gt;”,例如其中没有字符串。

我想从 XML 中接收所有带有或不带值的元素名称。所以我可以用它执行下一个任务。

像这样:

                business_duration = NULL
                calculation_complete = 1
                definition = 0050aedb58064100ad1a7198c9974545
                duration = NULL
                end = NULL
                field = NULL
                field_value = PRODUKTIE
                id = b5f520716fae82001c41df971e3ee4e3
                start = NULL
                sys_created_by = system
                sys_created_on = 2015-09-17 13:21:36
                sys_id = 0006a479c8a68200a7ffccf9faada3ce
                sys_mod_count = 0
                sys_updated_by = system
                sys_updated_on = 2015-09-17 13:21:36
                table = cmdb_ci_db_ora_instance
                u_created_on_last_7_days = 0
                u_old_value = NULL
                u_uummss = 152136
                u_yyyymmdd = 20150917
                value = PRODUKTIE

【问题讨论】:

  • 也许您可以显示您当前正在使用的 XPath,然后我们可能会看到您遇到困难的地方。获取元素的字符串内容的明显方法是使用 string(.) ,它适用于空元素以及具有内容的元素 - 尽管它会给你一个零长度的字符串,而不是字符串“NULL” .

标签: xml xpath xml-parsing


【解决方案1】:

你在这里(XPath 2.0)

//getRecordsResult/*/concat(local-name(), '=', if(empty(text())) then 'Null' else string(text()))

如果跳过命名空间

 //*[local-name()='getRecordsResult']/*/concat(local-name(), '=', if(empty(text())) then 'Null' else string(text()))

结果将是

business_duration=Null
calculation_complete=1
definition=0050aedb58064100ad1a7198c9974545
duration=Null
end=Null
field=Null
field_value=PRODUKTIE
id=b5f520716fae82001c41df971e3ee4e3
start=Null
sys_created_by=system
sys_created_on=2015-09-17 13:21:36
sys_id=0006a479c8a68200a7ffccf9faada3ce
sys_mod_count=0
sys_updated_by=system
sys_updated_on=2015-09-17 13:21:36
table=cmdb_ci_db_ora_instance
u_created_on_last_7_days=0
u_old_value=Null
u_uummss=152136
u_yyyymmdd=20150917
value=PRODUKTIE

【讨论】:

    【解决方案2】:

    我找到了解决办法!

    我需要的 xPath 是 '/*/*/*/*'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 2013-12-18
      • 1970-01-01
      • 2015-08-14
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多