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>
4

1 に答える 1

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"です。

于 2013-07-25T07:31:53.497 に答える