你好我一直在嘗試刪除一段時間的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