【问题标题】:xslt selecting all child nodes when only specifying an attributexslt 仅在指定属性时选择所有子节点
【发布时间】:2015-08-24 15:42:41
【问题描述】:

我有一些 XML,我正在使用 XSLT 对其进行转换以构建链接。首先,我的模板在具有特定属性的节点上匹配,并存储该属性的值,该属性工作正常。然后我需要找到一个 id 属性与我刚刚存储的值匹配的节点。但是,当我尝试选择节点并提取 id 属性进行比较时,它会选择我所针对的节点的所有子节点,即使我指定我只需要 id 属性。如何只选择 id 属性?

XML

<div>         
            <bibl id="label2212" n="M">
                <date n="created">19401231</date>
                <title level="m">test title 1</title>

                <kw type="subject">Ⓑ ...</kw><!-- EXTRA -->
                <kw type="subject">Ⓔ ...</kw><!-- EXTRA -->
                <kw type="subject">Ⓖ Indonesia &lt; Southeast Asia &lt; Asia</kw><!-- EXTRA -->

                <note type="comment">Linked reference: ABIA 13, 1938/658
                    <xref n="label658">label658</xref>
                </note>
            </bibl>
            <bibl id="label658" n="M">
                <date n="created">19401231</date>
                <title level="m">test title 2</title>

                <kw type="subject">Ⓑ ...</kw><!-- EXTRA -->
                <kw type="subject">Ⓔ ...</kw><!-- EXTRA -->
                <kw type="subject">Ⓖ Indonesia &lt; Southeast Asia &lt; Asia</kw><!-- EXTRA -->
            </bibl>

XSLT

<xsl:template match="note[@type = 'comment' ]/xref[@n]"> 
        <xsl:variable name="n-xref"><xsl:value-of select="@n"/></xsl:variable>

        <xsl:variable name="test"><xsl:value-of select="../../../bibl[@id]"/></xsl:variable>
        <a>
            <xsl:attribute name="href" select="$test"></xsl:attribute>
        </a>

         </xsl:for-each>-->
        <xsl:apply-templates/>
    </xsl:template>enter code here

运行时变量 test 包含 bibl 节点的所有子节点 我什至尝试过 select="../../../bibl[@id=$n-xref]" 也没有用

【问题讨论】:

  • 你的问题不清楚。请发布您的示例的预期结果。 -- 提示:使用 key 进行交叉引用。

标签: xml xslt


【解决方案1】:

表达式bibl[@id] 选择所有具有@id 属性的子bibl 元素。在您的示例中,所有bibl 元素都有一个@id 属性,因此您将它们全部选中。我猜您正在尝试选择@id 属性与$n-xref 的值匹配的那个。那将是bibl[@id=$n-xref]。你说你试过了,但没有用;再试一次,如果还是不行,请告诉我们你做了什么。

仔细观察,我怀疑您的下一个问题是代码&lt;xsl:attribute name="href" select="$test"/&gt;$test 的值是 bibl 元素,而您需要它的 @id 属性。如前所述,您的属性将设置为 bibl 元素的字符串值,即空格。

顺便说一句,为了清晰和性能,您的代码 &lt;xsl:variable name="n-xref"&gt;&lt;xsl:value-of select="@n"/&gt;&lt;/xsl:variable&gt; 应该写成 &lt;xsl:variable name="n-xref" select="@n"/&gt;

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 2011-01-30
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多