【问题标题】:How to retrieve child elements of certain element from XML using XPATH?如何使用 XPATH 从 XML 中检索特定元素的子元素?
【发布时间】:2019-09-18 09:35:14
【问题描述】:

我有以下 XML 文档:

<resultset>
<table>
    <name>RESULTS</name>
    <data>
        <row>
            <field name="TradeId" type="xs:integer">1185652601</field>
            <field name="TradeVersion" type="xs:integer">1</field>
            <field name="TradeDate" type="xs:date">20190807000000</field>
            <field name="tradeLastUpdatedTimestamp" type="xs:dateTime">2019-08-07 18:16:20.475078+01:00</field>
        </row>
    </data>
</table>
<table>
    <name>CustomCalcPeriod</name>
    <data>
        <row>
            <field name="CouponSchPayDateAdj" type="xs:date">20160920000000</field>
            <field name="CouponSchCouponAmount" type="xs:double"/>
            <field name="CouponSchRate" type="xs:double">5</field>
        </row>
    </data>
</table>
<table>
    <name>CustomNotionalStep</name>
    <data>
        <row>
            <field name="AnnuitySchNotional" type="xs:double">10000000</field>
            <field name="NotionalSchStartDateAdj" type="xs:date">20160620000000</field>
            <field name="NotionalSchStartDateUnadjusted" type="xs:date">20160620000000</field>
        </row>
    </data>
</table>

使用 XPATH 我想分别检索每个表的“行”元素列表:RESULTS、CustomCalcPeriod、CustomNotionalStep。到目前为止,我只设法使用以下表达式提取整个节点:

"//name[text()='RESULTS']"

我可以扩展这个表达式,使它返回一个只属于父表的“行”元素的 NodeList,而不是其余的吗?

【问题讨论】:

  • 您的 xml 中没有 CustomCalcPeriod

标签: java xml xpath


【解决方案1】:

我不确定最终输出应该是什么,但是这个表达式:

//table//row

应该为每个&lt;table&gt;选择3个&lt;row&gt;组。

【讨论】:

    【解决方案2】:
    //table[name/text() = 'RESULTS']/data/row
    

     

    //row[../../name/text() = 'RESULTS']
    

    这两个 XPath 表达式都应该给出以下输出(我认为这是你想要的)

    Element='<row>
            <field name="TradeId" type="xs:integer">1185652601</field>
            <field name="TradeVersion" type="xs:integer">1</field>
            <field name="TradeDate" type="xs:date">20190807000000</field>
            <field name="tradeLastUpdatedTimestamp" type="xs:dateTime">2019-08-07 18:16:20.475078+01:00</field>
        </row>'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-15
      • 1970-01-01
      • 2017-08-20
      相关资源
      最近更新 更多