2011-06-21 230 views
0

在XPath我怎樣才能查詢,如果我找孩子的年齡和名字的人有否孫子Xpath查詢幫助

<documentRoot> 
<parent name="data" > 

    <child id="1" name="alpha" > 
    <anotherchild> 
    <age>20</age> 
    <grandchild/> 
    </anotherchild> 
    </child> 

    <child id="2" name="beta" > 
    <anotherchild> 
    <age>50</age> 
    <grandchild id="2.1" name="beta-alpha" ></grandchild> 
    <grandchild id="2.2" name="beta-beta" ></grandchild> 
    </anotherchild> 
    </child> 

</parent> 
</documentRoot> 
+0

該fi第一個''元素包含無效的標記。有一個「」,沒有對應的「」。 –

+0

我不明白你的問題。兩個''元素在其內容中都有一個''元素(這也是令人困惑的,恰好是XPath樹模型中子元素的孫子)。您想要選擇哪些子元素? –

+0

我問過「誰沒有孫子」,但沒有「誰沒有孫子元素」Tnx – Spring

回答

3

看起來像你的XML有一些錯別字。假設你的XML是這樣的(與<grandchild/>,而不是</grandchild>下的第一<child>和關閉</documentRoot>

<documentRoot> 
    <parent name="data"> 
     <child id="1" name="alpha"> 
      <age>20</age> 
      <grandchild/> 
     </child> 
     <child id="2" name="beta"> 
      <age>50</age> 
      <grandchild id="2.1" name="beta-alpha"/> 
      <grandchild id="2.2" name="beta-beta"/> 
     </child> 
    </parent> 
</documentRoot> 

這個XPath將選擇子元素的時代,存在<grandchild/>沒有@id

//child[not(anotherchild/grandchild/@id)]/anotherchild/age 

這將返回相同的名稱child

//child[not(anotherchild/grandchild/@id)]/anotherchild/@name 
+0

tnx我更新了我的xml,你可以再看看嗎?你爲什麼不使用類似的東西(不(包含(孫子,'*')))你能解釋一下嗎? – Spring

+1

@XDeveloper - 我更新了包含'anotherchild' - 你仍然需要正確關閉''。 'not(anotherchild/grandchild/@ id)'對於第一個'child'評估爲false,因爲不存在具有路徑「anotherchild/grandchild/@ id」的節點。 'contains(grandchild,'*')'檢查是否有一個具有某些值的文本的孫元素。在這種情況下,兩個子節點都是'grandchild',唯一的區別是屬性不在那裏。 – cordsen