回答にはXSLT 2.0または3.0を使用できます。私は名前空間を削除し、XMLノードを解析2.0 XSLTスタイルシートを持っているXMLへの文字列とxPathへの解析 - XSLT 2または3
<theRootNode xmlns="http://myNamespace">
<xml>
<Company>
<TaxIdentity>
<id/>
</TaxIdentity>
<TaxIdentity>
<id>42-123456</id>
</TaxIdentity>
<Name>ABC Company</Name>
<Number>2230</Number>
</Company>
</xml>
</theRootNode>
:サクソンEEパーサ
は、XMLのサンプルを考えます。同じ変換の中で、私はちょうど解析したxmlノード内の空の値を持つ「TaxIdentity」ノードをすべて削除する必要があります。
現在の結果は以下のとおりです。
<theRootNode>
<xml>
<Company>
<TaxIdentity>
<id/>
</TaxIdentity>
<TaxIdentity>
<id>42-123456</id>
</TaxIdentity>
<Name>ABC Company</Name>
<Number>2230</Number>
</Company>
</xml>
</theRootNode>
望ましい結果は以下のとおりです。
<theRootNode>
<xml>
<Company>
<TaxIdentity>
<id>42-123456</id>
</TaxIdentity>
<Name>ABC Company</Name>
<Number>2230</Number>
</Company>
</xml>
</theRootNode>
私のXSLTは以下の通りです。注意したいのは、初期の結果を変数as = "element()またはparse-xml(version 3)を使用して置きますが、空のノードを削除することはできません。要素またはノード... TaxIdentiyという名前だけのもの。私はどのようなアプローチを取るべき?ソリューション?私は本当に同じ変換内ですべてを必要としています。ありがとうございました。ここで
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no" omit-xml-declaration="yes"/>
<!-- Copy elements without copying their namespace declarations -->
<xsl:template match="*[not(local-name() = 'xml')]" name="identity">
<xsl:element name="{name()}" namespace="">
<xsl:apply-templates select="node() | @*"/>
</xsl:element>
</xsl:template>
<!-- Copy content as is with lower priority -->
<xsl:template match="node() | @*" priority="-2">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!-- turn xml node content back into xml -->
<xsl:template match="*[local-name() = 'xml']">
<xsl:element name="xml" inherit-namespaces="no" namespace="">
<xsl:value-of select="." disable-output-escaping='yes'/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
ありがとうそれWOR! ks、私はまだ技術を解読しています。 – johkar
' 'はXSLT 3.0の2番目のテンプレートを置き換えます。そして、空の '