2016-09-20 37 views
0

我有下面的XML結構只計算上述議題的:Xpath的

<?xml version="1.0" encoding="UTF-8"?> 
    <body> 
     <division> 
      <Atopic><longtitle>TitleDiv1 Atopic</longtitle></Atopic> 
      <Btopic><longtitle>TitleDiv1 Btopic</longtitle></Btopic> 
      <Ctopic><longtitle>TitleDiv1 Ctopic</longtitle></Ctopic> 
      <division> 
      <Atopic><longtitle>TitleDiv1.1 Atopic</longtitle></Atopic> 
      </division> 
     <Dtopic><longtitle>TitleDiv2 Dtopic</longtitle></Dtopic> 
     <Etopic><longtitle>TitleDiv2 Etopic</longtitle></Etopic> 
     </division> 
    </body> 

我使用`計數(祖先::師[最後()]/* [包含(名稱(), '主題') ])獲取body/division元素下的所有*主題。

我的需要是,如果我使用我的背景從body/division/division/Atopic我想只得到身體/部門之前的主題。所以只有

<Atopic><longtitle>TitleDiv1 Atopic</longtitle></Atopic> 
<Btopic><longtitle>TitleDiv1 Btopic</longtitle></Btopic> 
<Ctopic><longtitle>TitleDiv1 Ctopic</longtitle></Ctopic> 

和NOT

<Dtopic><longtitle>TitleDiv2 Dtopic</longtitle></Dtopic> 
<Etopic><longtitle>TitleDiv2 Etopic</longtitle></Etopic> 

,因爲它是上下文節點之後的情況。

請建議。

+0

後XSLT你已經嘗試到目前爲止.... –

+0

使用'。 ./preceding-sibling :: *' –

+0

我使用Arbortext編輯器而不是XSLT。 –

回答

0

您的上下文節點://body/division/division/Atopic

你的純XPath表達式:

//body/division/division/Atopic 
/ancestor::division[last()] 
    /*[contains(name(), 'topic')] 
    [ 
     count(.| //body/division/division/Atopic/ancestor::division[1]/preceding-sibling::*[contains(name(), 'topic')]) 
     = 
     count(//body/division/division/Atopic/ancestor::division[1]/preceding-sibling::*[contains(name(), 'topic')]) 
    ] 

詳細解釋在這裏:xpath-select-all-elements-between-two-specific-elements