2016-09-17 69 views
0

當上下文指向除法/除法/ *主題時,我想要統計body/division下的所有主題標記,並將結果添加到上一個body/division/division標記的計數中。XPATH:Count Preceding Div元素

輸出=所有主題下主體/除法+體/格的計數/分

<?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> 
      <division> 
       <Atopic><longtitle>TitleDiv1.2 Atopic</longtitle></Atopic> 
      </division> 
     </division> 
     <division> 
      <Atopic><longtitle>TitleDiv2 Atopic</longtitle></Atopic> 
      <Dtopic><longtitle>TitleDiv2 Dtopic</longtitle></Dtopic> 
      <division> 
      <Atopic><longtitle>TitleDiv2.1 Atopic</longtitle></Atopic> 
      </division> 
      <division> 
      <Ctopic><longtitle>TitleDiv2.2 Ctopic</longtitle></Ctopic> 
      </division> 
     </division> 
    </body> 

因此,例如

  1. 如果我的歷境處於股利1/2,邏輯應統計body/division1下的所有*主題。所以它應該返回3(Atopic,Btopic,Ctopic)。這裏沒有前身/師/師的元素。因此o/p = 3 + 0 = 3
    2.與Div1/3類似,它應該計算身體/分裂標記下的*主題,即3,並且也計數前面的body/div/div(即3 + 1 = 4)。

  2. 當上下文是Div2/1時,計數器只應考慮body/division2下的*主題。
    所以如果我使用Div2/1 Atopic的邏輯,它應該返回「2」,因爲Div2標籤(body/division)有2個主題並且沒有前面的body/div/div。輸出= 2。在此,Div2標籤應考慮前一個機構/部門/部門,不應將Div1的部門/部門/部門考慮在內。總之,當遇到新的身體/部門時,應該重新設置機構/部門/部門。

請指教。

+0

這與您以前的問題有什麼不同:http://stackoverflow.com/questions/39531286/xpath-get-preceding-childrens –

+0

P.S.如果(a)分部具有唯一的id屬性並且(b)主題具有唯一的名稱並且(c)它正確縮進,則您的示例會更清晰。也不清楚究竟是什麼'...... DIV 1 ......'等應該是;如果他們是元素,爲什麼不讓他們成爲元素? –

+0

你好邁克爾,不同之處在於我還需要爲*主題添加除法/除法,例如「count(ancestor :: division [last()]/* [contains(name()''topic')])」。在考慮身體/部門下的*話題時,你的解決方案非常好。但是我還需要將分割/分割添加到count(ancestor :: division [last()]/* [contains(name(),'topic')])結果,以便在上下文返回1/3時返回在body/div和1 div/div = 4下的3個主題) –

回答

1

我只是猜測這裏,但在我看來,你想:

<xsl:value-of select="count(ancestor::division[last()]/*[contains(name(), 'topic')]) + count(../preceding-sibling::division)"/> 

未經檢驗的,因爲我不知道如何測試這對你的代碼。

+0

對不起Michael,count(before-sibling :: division)return 0無處不在。邏輯計數(ancestor :: division [last()]/* [contains(name(),'topic')])對要求工作正常。但我想要的是計算以前的div/div標籤。我嘗試過使用count(前::分割[parent :: division]),但它將DIV1的div/div元素的計數添加到DIV2的結果中。請幫助,我有點在這丟失 –

+0

我已經對XML進行了更改,示例XML沒有任何屬性。 –

+0

看到我的文章的編輯。 –