2017-10-04 17 views
1

XMLから特定の値を削除したいが、タグ名はそのまま残したい。私は逆を行う(タグを削除するが値を保持する)例を見てきました。ここに私のXMLがあります:特定の値をXMLから削除するが、XSLT 1.0を使用してタグ名を保持する

<Result> 
    <Max>100</Max> 
    <Min>10</Min> 
    <Range>90</Range> 
    <ResultPoints> 
     <ResultP1>.</ResultP1> 
    <ResultP2>.</ResultP2> 
    <ResultP3>.</ResultP3> 
    <ResultP4>.</ResultP4> 
    <ResultP5>.</ResultP5> 
    </ResultPoints> 
</Result> 

私は 'を削除します。タグ名はそのままにしてください。

<Result> 
    <Max>100</Max> 
    <Min>10</Min> 
    <Range>90</Range> 
    <ResultPoints> 
    <ResultP1/> 
    <ResultP2/> 
    <ResultP3/> 
    <ResultP4/> 
    <ResultP5/> 
    </ResultPoints> 
</Result> 

ここは私のXLTです。これにより、ResultPnタグが完全に削除されます。

<?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" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="*[. = '.']"> 
<xsl:value-of select="''"/> 
</xsl:template> 

</xsl:stylesheet> 

ご了承ください。

答えて

1

テンプレートにxsl:copyを入力するだけで、一致した要素をコピーできます。空の文字列を実際に出力する必要はありません。

<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" omit-xml-declaration="no"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="*[. = '.']"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

(注)このXSLTを試してみてください、私はすべての既存の属性間でコピーするxsl:apply-templatesを追加しました。

また、あなたは(直接テキストノードにマッチするのではなく、親要素)の代わりに、この1

<xsl:template match="text()[. = '.']" /> 
+0

は、ティムをありがとうと2番目のテンプレートを置き換えることができます!それはまさに私が探していたものです! –

関連する問題