2016-07-20 15 views
0

ルートノード以外のすべての要素からプレフィックスurnを削除するにはどうすればよいですか?私は、次のXSLTコードXSLTルートノード以外の要素からプレフィックスを削除する

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

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

としかしながら、ルートノードからプレフィックスと名前空間も除去されている試み

XML入力

<urn:client xmlns:urn='www.testing.com' xmlns:x='http://schemas.xmlsoap.org/soap/envelope/'> 
    <urn:header> 
     <urn:desc1>undefined</urn:desc1> 
     <urn:desc2>undefined</urn:desc2> 
    </urn:header> 
    <urn:itens1> 
     <urn:item1>undefined 
      <urn:name1>undefined</urn:name1> 
      <urn:name2>undefined</urn:name2> 
     </urn:item1> 
    </urn:itens1> 
    <urn:itens2> 
     <urn:item1>undefined 
      <urn:name1>undefined</urn:name1> 
      <urn:name2>undefined</urn:name2> 
     </urn:item1> 
     <urn:item2>undefined 
      <urn:name1>undefined</urn:name1> 
      <urn:name2>undefined</urn:name2> 
     </urn:item2> 
    </urn:itens2> 
</urn:client> 

XML出力

<urn:client xmlns:urn='www.testing.com' xmlns:x='http://schemas.xmlsoap.org/soap/envelope/'> 
    <header> 
     <desc1>undefined</desc1> 
     <desc2>undefined</desc2> 
    </header> 
    <itens1> 
     <item1>undefined 
      <name1>undefined</name1> 
      <name2>undefined</name2> 
     </item1> 
    </itens1> 
    <itens2> 
     <item1>undefined 
      <name1>undefined</name1> 
      <name2>undefined</name2> 
     </item1> 
     <item2>undefined 
      <name1>undefined</name1> 
      <name2>undefined</name2> 
     </item2> 
    </itens2> 
</urn:client> 

あなたは皆、どんなイデアを持っていますか?どのように

TKS

答えて

1

について:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

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

</xsl:stylesheet> 

これは、(彼らは通常であるように)、入力XMLの属性が無名前空間にある前提としています。実際、与えられた例は全く属性を持たないので、<xsl:copy-of select="@*"/>命令を完全に削除することができます。

+0

はい!あなたは正しいです。それは今働いている。どうもありがとう。 – user1761848

関連する問題