XSLT1:使用 xsl:element 如何包含当前选择的属性



我尝试使用 xsl:element 创建节点,以包含当前选择的所有属性。我以为应该很简单,但由于某种原因,我无法得到结果。

我隔离了案例,有XML:

<?xml-stylesheet href="myfile.xsl" type="text/xsl" ?>
<a firstAtt="1" secondAtt="2">
Some Text
</a>

我期待得到这个结果:

<a firstAtt="1" secondAtt="2"/>

有我的 XSLT 转换代码:

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<xsl:element name="{name()}" use-attribute-sets="{@*}"/>
</xsl:template>
</xsl:stylesheet>

在没有深入的情况下,我尝试了大量的这种方法。(包括xsl:for-eachxsl:attribute等(

我可以理解use-attribute-sets不能那样工作(意味着在运行时定位到当前属性集(。也许我错了。

这是用于评估,并且有一个限制,不使用 xsl:copy。还有一个限制是使其在 XSLT 1.0 中工作

我是 XML - XSL 的新手。如果有人可以提供帮助并感谢您的理解,请提前感谢您。

我不知道我是否正确理解了您所说的"当前选择"是什么意思,但是这个 XSL 样式表可以满足您的期望,至少对于您提供的输入:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:for-each select="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

最新更新