如何在XSLT中添加命名空间名称及其值?

时间:2013-07-25 06:51:51

标签: java xml xslt-1.0

我想在JAVA中使用XSLT将XML转换为XML。如何在XSLT文件中添加命名空间名称及其值?我已经尝试了很多方法来获取命名空间值,但没有得到我期望的输出。所以请做好必要的事。

这是我的XML,

<?xml version="1.0" encoding="ISO-8859-1"?>
<root xmlns="namespacename">
  <child>A</child>
  <child>B</child>
</root>

XSLT文件,

<?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:template match="/">
       <xsl:element name="root" namespace="namespacename">
          <xsl:element name="child-one">
            <xsl:value-of select="root/child"/>
          </xsl:element>
       </xsl:element>
     </xsl:template>
    </xsl:stylesheet>

我需要像这样的输出XML文件。

<?xml version="1.0" encoding="ISO-8859-1"?>
<root xmlns="namespacename">
  <child-one>A</child-one>
</root>

1 个答案:

答案 0 :(得分:2)

如果您知道命名空间,则只需将其添加为默认命名空间,并将结果写为文字元素。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns="namespacename"
                xmlns:i="namespacename"
                exclude-result-prefixes="i">
  <xsl:template match="/">
    <root>
      <child-one>
        <xsl:value-of select="i:root/i:child"/>
      </child-one>
    </root>
  </xsl:template>
</xsl:stylesheet>

请注意,XPath表达式root/child通常不尊重默认名称空间,因此您必须使用前缀(例如i)声明其他名称空间,以便路径变为i:root/i:child 。但是,这还需要使用exclude-result-prefixes="i"排除结果的命名空间。