【问题标题】:Accesing only immediate preceding sibling in xslt仅访问 xslt 中的前一个同级
【发布时间】:2011-02-11 06:36:49
【问题描述】:

我正在使用 XSLT 1.0。目前在<w:t> 模板中。我想检查前面的兄弟w:r(id=3) 是否有<w:fldChar w:fldCharType="end"/>

我只想要前面的兄弟姐妹而不是 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>

【问题讨论】:

  • 请发布格式正确且缩进正确的 XML。下次我会投反对票。
  • 请注意w:t 元素没有前面的兄弟w:r 而只是前面的。

标签: xslt xpath


【解决方案1】:

像这样使用 xpath preceding-sibling 轴:

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

它将选择最近的 ([1]) preceding-sibling 命名为 w:r,然后下降到任何名为 w:fldChar 的子元素,然后从那里命名为 w:fldCharType 的任何属性,然后如果有任何这样的节点存在,其文本为'end',返回true。

【讨论】:

  • 此外,始终值得一提的是,ancestorancestor-or-selfprecedingpreceding-sibling 轴是反向轴,因此位置谓词可能看起来令人惊讶。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2015-07-09
  • 1970-01-01
相关资源
最近更新 更多