gpt4 book ai didi

xslt - xpath 2.0 查询 - 如何测试当前元素是否是 xml 文档中具有此名称的第一个元素

转载 作者:行者123 更新时间:2023-12-03 15:35:21 24 4
gpt4 key购买 nike

我有以下 xsl 模板:

<xsl:template match="para">
<fo:block xsl:use-attribute-sets="paragraph.para">
<!-- if first para in document -->
<!--<xsl:if test="//para[1] intersect .">-->
<xsl:if test="//para[1] intersect .">
<xsl:attribute name="space-after">10pt</xsl:attribute>
<xsl:attribute name="background-color">yellow</xsl:attribute>
</xsl:if>
<xsl:choose>
<xsl:when test="preceding-sibling::*[1][self::title]">
<xsl:attribute name="text-indent">0em</xsl:attribute>
</xsl:when>
<xsl:when test="parent::item">
<xsl:attribute name="text-indent">0em</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="text-indent">1em</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates/>
</fo:block>
</xsl:template>

我遇到的问题是验证模板的当前节点是以下 xml 文档中的第一个 para 节点:
<document>
<section>
<paragraph>
<para>Para Text 1*#</para>
<para>Para Text 2</para>
</paragraph>
</section>
<paragraph>
<para>Para Text 3*</para>
<para>Para Text 4</para>
<para>Para Text 5</para>
<sub-paragraph>
<para>Para Text 6*</para>
<para>Para Text 7</para>
</sub-paragraph>
</paragraph>
<appendix>
<paragraph>
<para>Para Text 8*</para>
</paragraph>
<paragraph>
<para>Para Text 9</para>
</paragraph>
</appendix>
</document>

我目前使用的 xpath 是“//para[1] intersect”。这是为每组 para 选择第一个 para(在 XML 示例中用 * 表示)。关于如何只选择文档中第一次出现的 para 的任何想法(用# 表示)?

最佳答案

在 XPath 1.0 (XSLT 1.0) 中可以使用 :

count( (//para)[1] | .) = 1

这也适用于 XPath 2.0,但可能不如使用 intersect 有效运算符(operator)。

我会推荐以下 XPath 2.0 表达式 :
(//para)[1] is .

请注意使用 the XPath 2.0 is operator .

关于xslt - xpath 2.0 查询 - 如何测试当前元素是否是 xml 文档中具有此名称的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2498643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com