2011-02-11 15 views
5

我正在使用XSLT 1.0。目前我在<w:t>模板。我想檢查前面的兄弟w:r(id=3)是否有<w:fldChar w:fldCharType="end"/>只訪問xslt中的前一個同輩

我只想要前面的兄弟姐妹,而不是w:rid=2id=1

<t xmlns:w="http://example.com"> 
    <w:r id="1"> 
     <w:fldChar w:fldCharType="start"/> 
    </w:r> 
    <w:r id="2"> 
     <w:fldChar w:fldCharType="separate"/> 
    </w:r> 
    <w:bookmarkStart w:id="0" w:name="tocStartRef_1"/> 
    <w:r id="3"> 
     <w:fldChar w:fldCharType="end"/> 
    </w:r> 
    <w:bookmarkEnd w:id="0"/> 
    <w:r id="4"> 
     <w:rPr> 
      <w:rStyle w:val="Span"/> 
      <w:rFonts w:ascii="arial" w:eastAsia="arial" 
         w:hAnsi="arial" w:cs="arial"/> 
      <w:b/> 
      <w:sz w:val="32"/> 
     </w:rPr> 
     <w:t>Fonts</w:t> 
    </w:r> 
</t> 
+0

請發佈格式正確,縮進的XML。下次我會倒下。 – Flack 2011-02-11 11:08:37

+0

請注意,`w:t`元素沒有前面的兄弟`w:r`,而只是前面的。 – 2011-02-12 13:57:44

回答

11

使用XPath preceding-sibling軸這樣的:

preceding-sibling::w:r[1]/w:fldChar/@w:fldCharType = 'end' 

這將選擇最近的([1]preceding-sibling命名爲w:r,然後下降到名爲w:fldChar任何子元素(一個或多個),然後從任何屬性在那裏命名爲w:fldCharType,那麼如果存在其文本爲'end'的任何此類節點,則返回true。