簡體   English   中英

基於Java中的條件的xpath

[英]xpath based on condition in java

我有以下結構的xml:

<Root>
  <Sample>
    <Materil material_class="book" />
    <Book Name="harry" Price="8" />
    <Book Name="small things" Price="9" />
    <Book Name="snow" Price="10" />
  </Sample>
 <Commodity>
    <Sample>
        <Materil material_class="sub" />
        <Book Name="sherin" Price="8" />
        <Book Name="bigthings" Price="9" />
        <Book Name="leopard" Price="10" />
    </Sample>
    <Commodity>
         <Sample>
            <Materil material_class="sub" />
            <Book Name="azxcv" Price="86" />
            <Book Name="ddddd" Price="79" />
            <Book Name="qwert" Price="810" />
         </Sample>
    </Commodity>
    <Commodity>
         <Sample>
            <Materil material_class="subtwo" />
            <Book Name="ratnam" Price="86" />
            <Book Name="shantharam" Price="99" />
            <Book Name="da vinci" Price="10" />
         </Sample>
    </Commodity>
 </Commodity>
</Root>

有沒有一種方法可以根據條件來迭代此xml,例如,如果material_class = "sub" ,則可以迭代下面的Book標記並存儲@Name@Price 如果material_class = "book" ,則Book下面迭代Book標簽。 我也想得到/Root/Commodity/Commodity標簽數量的長度(在這種情況下,是兩個)。 任何幫助表示贊賞。 我是XPath的新手。

要獲取@material_class='sub'@material_class='book'的書@Name@Price ,請使用此XPATH

/Root[descendant-or-self::Sample or Sample[descendant-or-self::*]]//*[Materil[@material_class='sub' or @material_class='book']]/Book

要么

//Sample[Materil[@material_class='book' or @material_class='sub']]/Book

加載此XPATH后,要打印名稱,請使用@Name和Price,請使用@Price

要獲取/ Root / Commodity / Commodity標簽的數量,XPATH為

/Root/Commodity/Commodity

要么

//Commodity/Commodity

JAVA:

NodeList node = (NodeList) xpath.evaluate("/Root/Commodity/Commodity", xml, XPathConstants.NODESET);
count = node.getLength(); // OUTPUTS: 2

就您的信息而言,實際上通過XSLT呈現XML具有更好的性能並且更易於實現。

<xsl:apply-templates select="//Sample[Materil[@material_class='sub']]/Book"/>
<xsl:apply-templates select="//Sample[Materil[@material_class='book']]/Book"/>

我現在無法訪問XSL編輯器,因此尚未測試以上內容,但是它將為您提供一個思路。 選擇“書”,並以所需的條件約束Materil。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM