【问题标题】:XSLT How to access attribute from different tag level?XSLT 如何从不同的标签级别访问属性?
【发布时间】:2023-03-27 16:14:02
【问题描述】:

我是 xsl 和 xslt 的新手。我正在使用 xslt 进行 xml 到 xml 的转换。我有以下 xml 文件。我正在使用 for-each 循环遍历 REQ-IF/record,在循环内我想迭代 REQ-IF/Attributes/Attribute 以访问 @Name 值。我尝试使用 ../ 但它只提供一个级别的值并且不允许我迭代。你能帮我解决这个问题吗?谢谢。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<REQ-IF>
    <record>
        <Name>ABC</Name>
        <Presentationname>Task Record</Presentationname>
        <GUID>123</GUID>
    </record>
    <record>
        <Name>DEF</Name>
        <Presentationname>Role Record</Presentationname>
        <GUID>456</GUID>
    </record>
    <record>
        <Name>GHI</Name>
        <Presentationname>WorkProduct Record</Presentationname>
        <GUID>789</GUID>
    </record>
    <Attributes>
        <Attribute>
            <Name>Task</Name>
        </Attribute>
        <Attribute>
            <Name>Role</Name>
        </Attribute>
        <Attribute>
            <Name>WorkProduct</Name>
        </Attribute>
    </Attributes>
</REQ-IF>

【问题讨论】:

  • 您能否发布到目前为止您已经尝试过的内容,并说明您期望的结果以及您得到的结果?

标签: xml xslt xslt-1.0 xslt-2.0


【解决方案1】:

有效

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:template match="/REQ-IF">
        <xsl:for-each select="record">
            <xsl:text>&#x0A;</xsl:text>
            <xsl:value-of select="./Name"/>
            <xsl:for-each select="../Attributes/Attribute">
                <xsl:text>&#x0A;&#x09;</xsl:text>
                <xsl:value-of select="Name"/>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

输出:

ABC
    Task
    Role
    WorkProduct
DEF
    Task
    Role
    WorkProduct
GHI
    Task
    Role
    WorkProduct

在嵌套循环中,您可能使用了 for-each select="../Attributes" 而不是 for-each select="../Attributes/Attribute"。由于 REQ-IF 只有一个 Attributes 节点,所以只有一个结果。

【讨论】:

    猜你喜欢
    • 2020-02-08
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多