2011-02-11 6 views
5

私はXSLT 1.0を使用しています。現在<w:t>テンプレートです。前の兄弟w:r(id=3)<w:fldChar w:fldCharType="end"/>があるかどうかを確認したいと思います。xsltの直前の兄弟にのみアクセスする

id=2またはid=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を投稿してください。私は次回にdownvoteします。 – Flack

+0

'w:t'要素に先行する兄弟' w:r'はなく、直前の兄弟だけがあることに注意してください。 –

答えて

11

preceding-sibling軸このようなXPathの使用:

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

、その後から、その後の任意の属性、w:fldCharをという名前の子要素(複数可)に降り、最も近い([1]preceding-siblingw:rの名前を選択しますそこにw:fldCharTypeという名前がついていれば、テキストが'end'のノードが存在する場合はtrueを返します。

+0

正解の場合+1。 – Flack

+8

また、「先祖」、「先祖」、「先行する」、「先行する兄弟」の軸は逆の軸であるため、位置述語は驚くように見えることがあります。 – Flack