Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在XSLT中添加名称空间名称及其值?_Java_Xml_Xslt 1.0 - Fatal编程技术网

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

Java 如何在XSLT中添加名称空间名称及其值?,java,xml,xslt-1.0,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

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

这是我的XML

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

A.
B
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>

A.

如果您知道名称空间,只需将其添加为默认名称空间,并将结果作为文本元素写入即可

<?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”

排除结果的名称空间,我需要在输出XML中添加名称空间名称及其值,但它们只是在中显示XML元素,而不使用名称空间---使用xslt---link将XML转换为XML。可能与Hi Obecker重复,感谢您的快速回复,我已经检查过了,但不起作用。我需要根元素中的名称空间。谢谢。你说“它不起作用”是什么意思?我得到的结果与上面的示例完全相同(除了不同的编码和缺少换行符)对不起,Obecker,我的浏览器版本中的问题不在您的代码中,您的代码(浏览器)不支持名称空间标记。非常感谢您……嗨,Obecker,还有一个帮助,这是不是可以在子元素中添加名称空间,就像在两个元素(父元素和子元素)中都有相同的名称空间声明一样,没有多大意义。命名空间已在子元素的作用域中。所以在XSLT中这是不可能的,我怀疑任何其他(名称空间感知的)XML工具都不会做到这一点。当然,如果元素属于不同的名称空间,那么就没有问题。