2011-02-11 8 views
5

Estoy usando XSLT 1.0. Actualmente estoy en la plantilla <w:t>. Quiero verificar si el hermano anterior w:r(id=3) tiene <w:fldChar w:fldCharType="end"/>.Accesando solo al hermano anterior inmediato en xslt

Quiero el hermano anterior inmediato solo y no w:r teniendo id=2 o 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

publique XML bien formado y correctamente sangrado. Descartaré la próxima vez. – Flack

+0

Tenga en cuenta que el elemento 'w: t' no tiene ningún hermano anterior' w: r' sino solo los anteriores. –

Respuesta

11

Utilice el XPath preceding-sibling eje de esta manera:

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

que seleccionará la más cercana ([1]) preceding-sibling nombrado w:r, para luego descender a cualquier elemento (s) hijo llamado w:fldChar, entonces cualquier atributo de allí nombró w:fldCharType, entonces si existe ese nodo cuyo texto es 'end', devuelve verdadero.

+0

+1 para una respuesta correcta. – Flack

+8

Además, siempre vale la pena mencionar que los ejes 'ancestro',' ancestro-o-uno', 'anterior' y' hermano anterior' son ejes inversos, por lo que los predicados de posición pueden parecer sorprendentes. – Flack

Cuestiones relacionadas