2016-02-29 30 views
1

我想知道,如果下面的XPath表達式可以簡化爲:簡化特定的XPath表達式

//map[requester/@type='2' and requester/code] 

一些測試數據:

<root> 
    <map> 
     <requester type="2"> 
      <code>a</code> 
      <code>b</code> 
     </requester> 
    </map> 

    ... 
</root> 

我的目標是獲得具有隻有地圖元素至少一個具有類型屬性和值'2'的請求者,並且還至少有一個代碼元素。

+0

沒有看到您正在運行它的數據,這是不可能回答的。 – Matthew

+0

我已經添加了測試數據。 –

回答

1

對於您的用例,這可能很簡單。但是,它與您所描述的不符。

在這裏,你正在選擇地圖元素,其中

  1. 沒有與類型請求者元件屬性等於2
  2. 有一個帶代碼元件的請求者元件
  3. (1)和(2)中的請求者元素不是而不是一定相同

例如,在下面的地圖元件選自:

<root> 
    <map> 
     <requester type="2"/> 
     <requester> 
      <code>a</code> 
     </requester> 
    </map> 
</root> 

如果要在元件(1)和(2)是相同的,則應使用

//map[requester[@type='2']/code] 

在這裏,我們選擇具有其又具有屬性請求者元件所有地圖元素(在kjhughes的建議略微簡化的)類型的值爲2和的代碼元素。

+0

很大的改進!謝謝! –

+1

很好的解釋(+1)。下面是一個可以減少一些字符長度的變體:'// map [requester [@ type ='2']/code]' – kjhughes

+0

假設我還想'非'空白的'/map [請求者[@ type ='2']/code [normalize-space()]]可能很好嗎? –