2017-02-04 56 views
2

我想要做的就是重新命名iavmNotice /标题iavmNotice/iavmTitle:
这里是我的XML:重命名使用XSLT XML元素和逗号单独

<iavmNotice xmlns="http://stuff.com" noticeId="138643"> 
    <title>Cisco Vulnerability</title> 
    <techOverview> 
     <entry> 
     <title>2012-2490</title> 
     <description>Cisco ID 71.</description> 
     </entry> 
     <entry> 
     <title>2012-2525</title> 
     <description>Cisco ID 69.</description> 
     </entry> 
    </techOverview> 
</iavmNotice> 

这里是我的尝试:

<xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 
<xsl:template match="iavmNotice/title"> 
    <iavmTitle> 
    <xsl:apply-templates select="@* | node()"/> 
    </iavmTitle> 
</xsl:template> 
<xsl:template match="@iavmNotice/title"> 
    <xsl:attribute name="iavmTitle"> 
    <xsl:value-of select="."/> 
</xsl:attribute> 
</xsl:template> 

此外,还有一种方法可以导入techOverview/entry/title为逗号分隔的方式吗?将其导入2012-2490,2012-2525并删除说明。

回答

2

XML文档iavmNotice根元素上的xmlns="http://stuff.com"声明将整个文档放入http://stuff.com命名空间。

让你无论是需要让你的样式表意识到命名空间,否则你的比赛只使用local-name()

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="*[local-name() = 'iavmNotice']/*[local-name() = 'title']"> 
    <iavmTitle> 
     <xsl:apply-templates select="@* | node()"/> 
    </iavmTitle> 
    </xsl:template> 
</xsl:stylesheet> 
+1

伟大的答案!非常感谢你!现在有办法导入techOverview/entry/title为逗号分隔吗?将其导入为2012年2490年,2012年2525年并删除说明 – jjohnson

+0

如果您将其作为单独问题与具体标题一起描述问题,您可能会获得更好的运气 – sideshowbarker