こんにちは私はしばらくの間xmlのいくつかの部分を削除しようとしてきましたが、それは単に私のために機能していません。私の要件をリストすることから始めましょう:
1.例のように、値が空白であるか、値の長さが1未満であるすべてのノード属性を削除します。
<pr:Text default="" approved="true" type="">Mon-Sun 12HR</pr:Text>
になる必要があります<pr:Text approved="true">Mon-Sun 12HR</pr:Text>
私はこの部分をこれでカバーしたと思います(私は思う)、私が間違っているなら私を訂正してください:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:if test=". != ''">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
2.子にテキスト値がないノード(要素)全体を削除します。例:
<pr:WorkingHoursInfo>
<pr:WorkingHoursList>
<pr:WorkingHours dayOfweek="MONDAY">
</pr:WorkingHours>
<pr:WorkingHours dayOfweek="TUESDAY">
</pr:WorkingHours>
<pr:WorkingHours dayOfweek="WEDNESDAY">
</pr:WorkingHours>
<pr:WorkingHours dayOfweek="THURSDAY">
</pr:WorkingHours>
<pr:WorkingHours dayOfweek="FRIDAY">
</pr:WorkingHours>
<pr:WorkingHours dayOfweek="SATURDAY">
</pr:WorkingHours>
<pr:WorkingHours dayOfweek="SUNDAY">
</pr:WorkingHours>
</pr:WorkingHoursList>
</pr:WorkingHoursInfo>
になるはずです:
<pr:WorkingHoursInfo>
</pr:WorkingHoursInfo>
したがって、可能であれば、これら2つの変換を一度に実行する必要があります。私は現在この#2で立ち往生しています。
質問の更新:
回答ごとMartin Honnen
にxslファイルを次のように変更しました:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*[not(normalize-space())]"/>
<xsl:template match="*[not(*/*) and not(*[normalize-space()])]"/>
</xsl:stylesheet>
しかし、現在、要件1.に違反しているため<pr:Text default="" approved="true" type="">Mon-Sun 12HR</pr:Text>
、xmlから削除されます。
別の更新:
Martin Honnen
ほぼ機能しているので、機能1
し2
ていて(ほぼ)機能しています。1つの例外は、テキスト値を持たない子のない単一の要素が削除されないことです。
<pr:DescriptionAttribute Type="PRIMARY"/>
これも削除する必要があります。ですから、ほとんど機能しています。