在 XPATH 方面需要幫助。
我使用這個庫jcabi(參見示例)來處理 XML 檔案。我遇到了一個問題(所有名為“成員”的節點都被檢索,我只想要第一級“成員”節點而不是嵌套節點。
XML myXml = new XMLDocument(stringXMLFormat);
List<XML> members = myXml.xpath("//struct/*"); // the problem is "//stuct/*" I can't find appropriate expression to query only first level of member nodes.
Instead having members.size() = 4, I have members.size() = 6.
I dont want the two nested member (Member Level 2)
<struct> ------------------------------------
<member>| Exclude this part from the result
<struct>
| <member>
------------------------------------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<methodResponse>
<params>
<param>
<value>
<struct> <!-- NOT THIS : I apply XPATH query on this : myXml.xpath("//struct/*") ==> Retrieve all member nodes in the document; but I just want the firs level of member nodes -->
<member> <!-- Member -> Level 1 : Must be retrive -->
<name>attribut1</name>
<value>
<int>0</int>
</value>
</member>
<member> <!--Member -> Level 1 : Must be retrive -->
<name>attribut2</name>
<value>
<struct>
<member> <!-- Member Level 2 : I don't want to retrive this -->
<name>attribut2-attr1</name>
<value>
<boolean>1</boolean>
</value>
</member>
</struct>
</value>
</member>
<member> <!--Member -> Level 1 : Must be retrive -->
<name>attribut3</name>
<value>
<array>
<data>
<value>
<struct> <!--NOT THIS -->
<member> <!--Member -> Level 2 : I don't want to retrive this -->
<name>attiribut3-attr-1</name>
<value>
<int>1</int>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</member>
<member> <!-- Member -> Level 1 : Must be retrive -->
<name>attribut4</name>
<value>
<string>10</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
如何只選擇第一級成員 而不 選擇檔案中的所有成員?
謝謝您的幫助。
uj5u.com熱心網友回復:
代替
"//struct/*"
利用
"//param/value/struct/*"
uj5u.com熱心網友回復:
這個 XPath,
//member[not(ancestor::member)]
將選擇所有member沒有member元素祖先的元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/417380.html
標籤:
