【发布时间】:2010-09-06 21:00:56
【问题描述】:
我想转换一个 XML 文档。源 XML 如下所示:
<svc:ElementList>
<svc:Element>
<Year>2007</Year>
</svc:Element>
<svc:Element>
<Year>2006</Year>
</svc:Element>
<svc:Element>
<Year>2005</Year>
</svc:Element>
</svc:ElementList>
我想把它变成:
<ElementList>
<NewTag2007/>
<NewTag2006/>
<NewTag2005/>
</ElementList>
以下代码行不工作:
<xsl:element name="{concat('NewTag',Element/Year)}"/>
输出是一系列如下所示的元素:。 (没有空格...)
"//Element/Year"、"./Element/Year" 和 "//svc:Element/Year"也不行。一个复杂的问题是“Element”标签在“svc”命名空间中,而“Year”标签在默认命名空间中。
无论如何,我是面临命名空间问题还是我误用了“concat()”函数?
【问题讨论】:
-
很高兴,该解决方案有效。但通常我会建议不要在运行时动态创建标签名称(尽管它有效!)。我以更静态的方式理解 xml TAG 结构。我的解决方案是:采用像
这样的静态 XML 标记。您仍然可以使用 XSLT 和使用“element[year="2007"] 的 XPath 访问它。因此您既不会失去灵活性,又可以获得安全性和一致性......只是一个想法。
标签: xml xslt namespaces