2014-07-24 42 views
0

我有一個元素的結構如下所示:的XPath如何檢查的祖先元素具有一定的名字

<template> 
    <x name="foo"> 
     <y> 
      <x> 
       <a> 
        <b number="1" /> 
        <c>2</c> 
       </a> 
      </x> 
      <c>5</c> 
     </y> 
    </x> 
</template> 

我需要它,因此b元素只能在a只要存在的祖先之一是一個帶有名字的x。我有一套備選方案,但我無法通過測試。這是我認爲會工作:

ancestor::x[@name] 

但我沒有得到任何結果。我唯一幸運的xpath是這樣的:

ancestor::node() 

誰能告訴我我失蹤了什麼?

編輯:

我使用Java的Xerces 2.11庫加載XSD文件,其中包括標籤。

+1

嗯......這個XPath能夠返回給定的XML結果:'// b [ancestor :: x [@name]]' – har07

+0

'ancestor :: x [@name]'應該在正確的上下文中工作。您可能需要展示更多上下文才能解決問題。 – LarsH

回答

0

我試過使用下面的xpath,它給了我適當的結果。我希望你正在爲祖先元素使用適當的上下文。

//template//b/ancestor::x[@name] 

輸出結果如下:

Element='<x name="foo"> 
    <y> 
    <x> 
     <a> 
     <b number="1" /> 
     <c>2</c> 
     </a> 
    </x> 
    <c>5</c> 
    </y> 
</x>' 

根據你的情況下,XPath的將是:

//template//b[ancestor::x[@name]] 

和輸出會像下面這將僅給出它具有名稱屬性的祖先元素'x':

Element='<b number="1" />' 
相關問題