4

エンベロープから XML を抽出する必要があります。しかし、意図した出力を得ることができません。出力で名前空間を取り除く必要があります。

私の入力:

<ns1:input xmlns:ns1="http://mysapmle.org/" xmlns="http://othersample.org/">
        <sample>
            <inner tc="5">Test</inner>
            <routine>Always</routine>
        </sample>
</ns1:input>

私の期待される出力:

<sample>
    <inner tc="5">Test</inner>
    <routine>Always</routine>
</sample>

私の実際の出力:

    <sample xmlns="http://othersample.org/">
            <inner tc="5">Test</inner>
            <routine>Always</routine>
        </sample>

私のXSLT:

<xsl:output omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/">
    <xsl:copy copy-namespaces="no">
        <xsl:apply-templates select="//sample" />           
    </xsl:copy>     
</xsl:template> 

<xsl:template match="@*|node()">
    <xsl:copy copy-namespaces="no">
        <xsl:apply-templates select="@*|node()" />          
    </xsl:copy>     
</xsl:template>

助けてください。

4

1 に答える 1

2

これは、名前空間を削除するために機能するはずです。

<xsl:output omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/">
   <xsl:apply-templates select="*/*" />
</xsl:template>

<xsl:template match="@*">
    <xsl:attribute name="{local-name()}">
        <xsl:value-of select="."/>          
    </xsl:attribute>     
</xsl:template>

<xsl:template match="*">
    <xsl:element name="{local-name()}">
        <xsl:apply-templates select="@* | node()" />
    </xsl:element>
</xsl:template>

しかし、あなたがこれを行う必要があるかどうかは少し疑わしいです。これを追加する XML が同じ名前空間を使用しており、これが含まれている XML が持つべき名前空間である場合、この XML に名前空間宣言が含まれていてもかまいません。

于 2013-01-16T20:41:29.283 に答える