2017-08-25 122 views
0

我通過npm使用xpath,我正在搜索XPath 1.0表達式,這樣'name'和'run'之後的搜索應該會導致以下輸出。XPath通過部分字符串找到節點的子節點

使用「// * [contains(name(),'name')]」找到第一個「父節點」已經​​有效,但我不知道是否有可能通過它的一部分找到一個孩子名稱(下面的任何級別)?

輸入:

<root> 
    <NameX> 
     <getLenght> 
     <unit>m</unit> 
     </getLenght> 
     <getStatus> 
     <status>0</status> 
     </getStatus> 
    </NameX> 
    <Name2> 
     <getStatus> 
     <status>0</status> 
     </getStatus> 
     <running> 
     <bit>true</bit> 
     </running> 
    </Name2> 
</root> 

輸出:

<running> 
    <bit>true</bit> 
</running> 
+0

你嘗試'// * [包含(名稱(), '名')] // * [contains(name(),'run')]'? – Andersson

+0

我不確定我是否已經嘗試過 - 我會在星期一看看,謝謝。 – Max

+0

您能澄清一下您希望XPath執行什麼操作嗎? – Andersson

回答

0

安德森的答案是正確的:

//*[contains(name(), 'name')]//*[contains(name(), 'run')] 

高級例如:

如果您要搜索至少包含子元素的父節點「名稱」,例如'getLen' getStat」,那麼你可以使用此查詢:

//*[contains(name(), 'Name')]//*[contains(name(), 'getLen') or 
contains(name(), 'getStat')]` 

輸出:

<NameX> 
    <getLenght> 
     <unit>m</unit> 
    </getLenght> 
    <getStatus> 
     <status>0</status> 
    </getStatus> 
</NameX>