[英]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
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.