Xml 使用xslt迭代属性

Xml 使用xslt迭代属性,xml,xslt,xpath,Xml,Xslt,Xpath,我有一个xml数据,如下所示 <Roll NO="4620" CLASSNO="0" ID="0" DID="0" REVSN="0" DNO="3" ></Roll> <Roll NO="4630" CLASSNO="0" ID="0" DID="0" REVSN="0" DNO="3"></Roll> 我希望在不使用XSLT指定名称的情况下遍历属性。 有什么办法吗?您的代码不是格式良好的xml,但关于它的问题: <xsl:templ

我有一个xml数据,如下所示

<Roll NO="4620" CLASSNO="0" ID="0" DID="0" REVSN="0" DNO="3" ></Roll>
<Roll NO="4630" CLASSNO="0" ID="0" DID="0" REVSN="0" DNO="3"></Roll>

我希望在不使用XSLT指定名称的情况下遍历属性。
有什么办法吗?

您的代码不是格式良好的xml,但关于它的问题:

<xsl:template match="Roll"> <!-- or "SB" or whatever -->
  <xsl:for-each select="@*">
    <!-- ... whatever you want to do with them ... -->
    <!-- use local-name and value(.) -->
  </xsl:for-each>
</xsl:template>

您可以使用此XPath
@*
获取所有属性,例如:

XML:


虽然可以做到这一点,但请记住,属性的顺序是未定义的,不同的XSLT处理器可以遍历并以不同的顺序输出处理每个属性的结果。这意味着输出是不可预测的,依赖于实现,任何通过属性“迭代”的解决方案都是不可移植的。这个问题的一个解决方案是使用
并处理按名称排序的属性。这将是便携式的。另一方面,对于所有XSLT处理器来说,可能不可能以其“可见顺序”处理属性。@Dimitre:如果顺序在输出中很重要,这才是问题;问题中没有具体说明这一点。出于好奇,您知道有哪个xslt处理器不按“可见顺序”处理它们吗?@Flynn1179:我认为顺序根本不是由XSLT处理器决定的,而是由使用XSLT的XML解析器决定的。我没有对不同的XML解析器呈现属性的顺序进行任何研究,但是如果某些XML解析器不以“可见”顺序生成属性,我也不会(不应该)感到惊讶,因为这不是XML规范所要求的。下面是一个示例——DTD/模式中的默认属性在XML文档的文本中不“可见”。默认属性应位于属性“有序”序列中的哪个位置?解析器可以随意决定!
<Roll NO="4620" CLASSNO="0" ID="0" DID="0" REVSN="0" DNO="3"/>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/*">
        <xsl:for-each select="@*">
            <xsl:value-of select="concat(name(), ': ', ., ' ')"/>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>
NO: 4620 CLASSNO: 0 ID: 0 DID: 0 REVSN: 0 DNO: 3