JPL*_*mme 14 xml xslt namespaces
我想转换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>
Run Code Online (Sandbox Code Playgroud)
我想把它变成:
<ElementList>
<NewTag2007/>
<NewTag2006/>
<NewTag2005/>
</ElementList>
Run Code Online (Sandbox Code Playgroud)
以下代码行无效:
<xsl:element name="{concat('NewTag',Element/Year)}"/>
Run Code Online (Sandbox Code Playgroud)
输出是一系列如下所示的元素:<NewTag>.(没有空格......)
"// Element/Year","./ Element/Year"和"// svc:Element/Year"也不起作用.一个复杂因素是"Element"标记位于"svc"命名空间中,而"Year"标记位于默认命名空间中.
所以,无论如何,我是否面临命名空间问题,或者我错误地使用了"concat()"函数?
jel*_*irt 13
可能是命名空间问题,也许是当前上下文的问题.对于源(添加了名称空间声明,使其形成格式良好的xml)
<svc:ElementList xmlns:svc="svc">
<svc:Element>
<Year>2007</Year>
</svc:Element>
<svc:Element>
<Year>2006</Year>
</svc:Element>
<svc:Element>
<Year>2005</Year>
</svc:Element>
</svc:ElementList>
Run Code Online (Sandbox Code Playgroud)
样式表
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:svc="svc"
version="1.0">
<xsl:template match="svc:ElementList">
<xsl:element name="{local-name()}">
<xsl:for-each select="svc:Element">
<xsl:element name="{concat('NewTag', Year)}"/>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
将为您提供所需的输出.请注意,svc:Element
需要使用前缀命名空间选择,并且生成新标记时的上下文svc:Element
不是svc:ElementList
.
归档时间: |
|
查看次数: |
19302 次 |
最近记录: |