You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用XSLT输出XML元素标签内的所有属性值?

如何用XSLT输出元素的所有属性值

我查到的XSLT相关方案大多是输出节点及子节点的值,但我想了解如何输出元素标签内的所有属性值。这么做的原因是我有大量属性值,将它们放在元素标签内比创建多层子节点更便捷。

XML示例

<data>
<info>
    <catalog Id="1111" Locale="en_GB">
        <books>
            <book id="01" Name="Title 1" Author="John Doe"></book>
            <book id="02" Name="Title 2" Author="Jane Doe"></book>
        </books>
    </catalog>
</info>
</data>

当前XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body> 

<xsl:for-each select="data/info/catalog">
   <xsl:value-of select="@Id" />
   <xsl:value-of select="/books/book/@Name"/>
</xsl:for-each>

</body>
</html>
</xsl:template>
</xsl:stylesheet>

期望输出

Catalog Id: 1111

Attributes:
id: 01
Name: Title 1
Author: John Doe

id: 02
Name: Title 2
Author: Jane Doe

解决方案

要实现输出所有属性值,核心是使用@*匹配元素的所有属性,再结合遍历逻辑输出属性名和对应值。以下是调整后的XSLT代码:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 设置输出为纯文本,匹配期望格式 -->
    <xsl:output method="text" encoding="UTF-8"/>

    <xsl:template match="/">
        <!-- 遍历每个catalog -->
        <xsl:for-each select="data/info/catalog">
            <!-- 输出catalog的Id属性 -->
            <xsl:text>Catalog Id: </xsl:text>
            <xsl:value-of select="@Id"/>
            <xsl:text>

Attributes:
</xsl:text>

            <!-- 遍历当前catalog下的所有book元素 -->
            <xsl:for-each select="books/book">
                <!-- 遍历当前book的所有属性 -->
                <xsl:for-each select="@*">
                    <!-- 输出属性名和值 -->
                    <xsl:value-of select="name()"/>
                    <xsl:text>: </xsl:text>
                    <xsl:value-of select="."/>
                    <xsl:text>
</xsl:text>
                </xsl:for-each>
                <!-- 不同book之间换行分隔 -->
                <xsl:text>
</xsl:text>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

关键说明

  1. 输出格式设置:通过<xsl:output method="text"/>指定输出为纯文本,避免生成HTML标签,贴合期望的文本格式。
  2. 匹配所有属性:使用@*可以选中当前元素的所有属性,无需逐个指定属性名,适合属性数量多的场景。
  3. 属性名获取:用name()函数获取当前属性的名称,结合value-of select="."获取属性值,实现动态输出所有属性。
  4. 路径修正:在catalog的遍历中,选择books/book是相对路径,确保能正确找到当前catalog下的子元素,避免原代码中绝对路径/books/book的错误。

内容的提问来源于stack exchange,提问作者user19947827

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:10:16