【发布时间】:2018-04-13 15:28:46
【问题描述】:
在 .xsl 样式表的帮助下转换 xml 文件期间重命名子节点时遇到问题。问题是,只处理值而不是标签。我想要两者兼得。
改造前的原件:
<old>
<ns2:Header>
<EntityId>yxc</EntityId>
<Application>11</Application>
<Version>354</Version>
<User>
<Id>user1</Id>
</User>
</ns2:Header>
....
</old>
预期结果:
<new>
<Header>
<EntityId>yxc</EntityId>
<Application>11</Application>
<Version>354</Version>
<User>
<Id>user1</Id>
</User>
</Header>
...
</new>
到目前为止,我得到的是这样的 .xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/">
<new xmlns:ns2="http://example.com">
<xsl:template match="//ns2:Header">
<xsl:element name="Header">
<xsl:apply-templates select="//ns2:Header" />
</xsl:element>
</xsl:template>
.....
</new>
</xsl:template>
</xsl:stylesheet>
转换后,“Header”的子节点丢失,只有值还在:
<new xmlns:ns2="http://example">
<Header>
yxc
11
354
user1
</Header>
...
</new>
我想我缺少一些关于“应用模板”函数的表达式。 有什么想法吗?
谢谢!
【问题讨论】:
-
您输入的 XML 当前无效。它使用
ns2:命名空间前缀,但没有用它声明命名空间 URL。您是否在输入 XML 中缺少xmlns:ns2='???'?谢谢。
标签: xml xslt xslt-1.0 transformation apply-templates