【发布时间】:2020-09-02 22:39:48
【问题描述】:
我尝试使用 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-each、xsl:attribute等)
我可以理解use-attribute-sets 不能那样工作(意味着在运行时定位到当前的属性集)。也许我错了。
这是为了评估,有一个限制是不能使用 xsl:copy。使它在 XSLT 1.0 中工作也有一个限制
我是 XML - XSL 的新手。如果有人可以提供帮助,请提前感谢您的理解。
【问题讨论】:
-
如果您不能使用
xsl:copy,则使用xsl:attribute重新创建一个属性 - 与您对元素所做的一样。要重新创建所有属性,请将xsl:for-each或xsl:apply-templates与另一个匹配属性的模板一起使用。 -
到底有谁安排任务编写代码时不是一只手而是两只手绑在背后? (或者是否允许
xsl:copy-of?对于属性,复制和复制做同样的事情。) -
您好,非常感谢您的帮助。我们想通了。没有 xsl:copy 或 xsl:copy-of 也可以做到这一点。 (见皮埃尔的回答)我认为老师想把我们推到“训练台”上。现在我摆脱了卡住的位置。谢谢!!!
标签: xml xslt attributes xslt-1.0