我想在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>
答案 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"
排除结果的命名空间。