xml属性顺序的更改
我正在使用xslt转换来转换一些xml文件。为了格式化输出,我使用的是xsl样式表中的两个标记xml属性顺序的更改,xml,xslt,Xml,Xslt,我正在使用xslt转换来转换一些xml文件。为了格式化输出,我使用的是xsl样式表中的两个标记 <xsl:output method="xml" indent="yes"/> <xsl:strip-space elements="*"/> 但问题是,在windows中,我得到的是一种输出,而当我在unix机器上运行程序时,我得到的是另一种输出。 例如: 但在unix中,我得到的是 这是一个奇怪的问题。非常感谢您的帮助。在XML中,元素的属性集合中没有定义标准顺序
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
但问题是,在windows中,我得到的是一种输出,而当我在unix机器上运行程序时,我得到的是另一种输出。
例如:
但在unix中,我得到的是
这是一个奇怪的问题。非常感谢您的帮助。在XML中,元素的属性集合中没有定义标准顺序——这可能因实现而异
另外,如果两个XML文档之间的唯一区别是属性的顺序,则将它们视为“相等”——例如XPath 2.0函数deep equal($doc1,$doc2)生成true()
这类似于一个类定义——两个类定义的唯一区别是属性(或方法)的顺序是相同的类定义,可以相互替换,而不会导致使用该类定义实例的任何程序产生不同的结果
这是一个演示如果两个文档的唯一区别是属性的顺序,那么它们被视为“相等”:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vDoc2">
<t y="2" x="1" />
</xsl:variable>
<xsl:template match="/">
<xsl:sequence select="deep-equal(/, $vDoc2)"/>
</xsl:template>
</xsl:stylesheet>
即使在给定的实现(XML解析器和XSLT处理器)中发现了一些以特定顺序显示属性的黑客行为,也不能保证这种黑客行为能够在下一版本的实现中使用 在XML中,元素的属性集合中没有定义标准顺序——这可能因实现而异
另外,如果两个XML文档之间的唯一区别是属性的顺序,则将它们视为“相等”——例如XPath 2.0函数deep equal($doc1,$doc2)生成true()
这类似于一个类定义——两个类定义的唯一区别是属性(或方法)的顺序是相同的类定义,可以相互替换,而不会导致使用该类定义实例的任何程序产生不同的结果
这是一个演示如果两个文档的唯一区别是属性的顺序,那么它们被视为“相等”:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vDoc2">
<t y="2" x="1" />
</xsl:variable>
<xsl:template match="/">
<xsl:sequence select="deep-equal(/, $vDoc2)"/>
</xsl:template>
</xsl:stylesheet>
即使在给定的实现(XML解析器和XSLT处理器)中发现了一些以特定顺序显示属性的黑客行为,也不能保证这种黑客行为能够在下一版本的实现中使用 虽然我不确定这是为什么,但我很好奇为什么这会给你带来问题。您的程序需要特定的属性顺序吗?我想如果我们看到XML输入文件和XSLT文件会有所帮助,谢谢!在XML中,在元素的属性集中并没有定义标准的顺序——这可能因实现而异。另外,如果两个XML文档之间的唯一区别是属性的顺序,则它们被视为“相等”——例如XPath 2.0函数deep equal($doc1,$doc2)
生成true()
。即使在给定的实现(XML解析器和XSLT处理器)中发现了某些以特定顺序显示属性的黑客行为,也不能保证这种黑客行为能够在下一版本的实现中使用。请您解释一下为什么这是一个问题?实际上,这不是一个问题,我只是好奇为什么会发生这种事虽然我不确定为什么会这样,但我很好奇为什么这会给你带来麻烦。您的程序需要特定的属性顺序吗?我想如果我们看到XML输入文件和XSLT文件会有所帮助,谢谢!在XML中,在元素的属性集中并没有定义标准的顺序——这可能因实现而异。另外,如果两个XML文档之间的唯一区别是属性的顺序,则它们被视为“相等”——例如XPath 2.0函数deep equal($doc1,$doc2)
生成true()
。即使在给定的XML解析器和XSLT处理器的实现中发现了某些以特定顺序显示属性的黑客行为,也不能保证这种黑客行为能够在下一版本的实现中使用。请您解释一下为什么这是一个问题?实际上,这不是一个问题,只是好奇为什么会发生这种情况
true