你好我一直在尝试删除一段时间的xml部分,现在它根本不适合我。首先,我要列举我的要求:xsl转换删除部分xml
卸下所有节点属性,这些属性值是空白或值长度< 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任何帮助appriciated
问题更新:
每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>
但现在要求是现在违反<pr:Text default="" approved="true" type="">Mon-Sun 12HR</pr:Text>
从xml中被删除。
另一个更新:
从Martin Honnen
几乎工作,所以1
正在工作并且2
在工作(几乎)。一个例外是,单独的元素,而它们没有文本值的孩子不被删除即:
<pr:DescriptionAttribute Type="PRIMARY"/>
这应该被删除。所以它几乎工作。
感谢您的回复,请参阅我的更新 – London 2012-07-23 14:16:02
我编辑了一个模板,希望能够防止删除包含文本内容的元素。 – 2012-07-23 14:33:55
好吧,先生,你太亲密了,请看我的更新(+1忘了第一位) – London 2012-07-23 14:41:42