2017-12-15 6 views
0

誰かがこれに対応しています。 私は、テストデータで完全に埋め込まれたXMLを持っています。私はすべての要素テキストを削除する必要があります。 XSLのすべてのテキスト要素をクリアします

<xml> 
    <parent> 
     <child>A</child> 
     <child>B</child> 
     <pet> 
      <dog>C</dog> 
      <cat>D</cat> 
     </pet> 
    </parent> 
</xml> 

は私の本当のXMLは、100以上の異なる要素名を含む

<xml> 
    <parent> 
     <child></child> 
     <child></child> 
     <pet> 
      <dog></dog> 
      <cat></cat> 
     </pet> 
    </parent> 
</xml> 

になる必要があり、私は一般的なアプローチが必要です。

私は変種の変形を試みていますが、XSLエラーが発生しています。ファイル内

エラー:cleanxml.xsl -2147467259は、有効な名前を指定する必要があり、「ELEMENT」タイプのノードを作成します。

<?xml version='1.0'?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
<xsl:template match='/|@*|node()'> 
    <!-- 
    Regular Identity Transform 
    <xsl:copy> 
     <xsl:apply-templates select='@*|node()'/> 
    </xsl:copy> 
    --> 
    <xsl:variable name='name' select='local-name()'/> 

    <xsl:element name='{$name}'> 
     <xsl:apply-templates select='@*|node()'/> 
    </xsl:element> 

</xsl:template> 

</xsl:stylesheet> 
+1

エラーメッセージの原因は、テンプレートが名前のない文書ノードやテキストノードなどのノードに一致していることです。 $ nameの値は長さゼロの文字列です。名前の長さがゼロの文字列の要素を作成することはできません。 –

答えて

1

使用あなたは恒等変換で始まり、その後、XSLT 3(http://xsltfiddle.liberty-development.net/gWcDMec)とそう

<xsl:template match="text()[normalize-space()]"/> 

を追加する必要があり、このXSL

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

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

<xsl:template match="text()" /> 

</xsl:stylesheet> 
+0

thx buddy!非常に役立ちます –

0

はあなたが必要とするすべては

です
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="3.0"> 

    <xsl:mode on-no-match="shallow-copy"/> 

    <xsl:template match="text()[normalize-space()]"/> 

</xsl:stylesheet> 

は、以前のバージョンのためにあなたの代わりにxsl:modeを使用しての

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

として恒等変換を綴るする必要があります。

関連する問題