您好,我一直在尝试删除 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上,任何帮助都可以得到
问题更新:
每个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
正在工作(几乎)。一个例外是没有子元素且没有文本值的单个元素不会被删除,即:
<pr:DescriptionAttribute Type="PRIMARY"/>
这也应该删除。所以它几乎可以工作了。