[英]How to remove nodes from xml based on the value of a tag
使用xml和xsl,我想解析特定節點和標簽的輸入xml。 如果標簽值以“ z”開頭,那么我想刪除該節點。 (或在沒有此節點的情況下創建新的文件xml文件)
隨附了示例xml文件以供參考。 由於最后一個節點的顯示名稱以“ z *”開頭,因此我希望刪除最后一個節點。
“ zseafood”
提前致謝。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ItemSet xmlns:ns1="urn:/Items/data">
<ns1:ObjectName>com</ns1:ObjectName>
<ListOfItems>
<Item>
<ns1:Name>name1</ns1:Name>
<ns1:ListOfItemDesc>
<ItemTranslation>
<ns1:DisplayName>fruits</ns1:DisplayName>
<ns1:ValidationErrorMsg>120</ns1:ValidationErrorMsg>
</ItemTranslation>
</ns1:ListOfItemDesc>
</Item>
<Item>
<ns1:Name>name2</ns1:Name>
<ns1:ListOfItemDesc>
<ItemTranslation>
<ns1:DisplayName>vegetables</ns1:DisplayName>
<ns1:ValidationErrorMsg>24.</ns1:ValidationErrorMsg>
</ItemTranslation>
</ns1:ListOfItemDesc>
</Item>
<Item>
<ns1:Name>name3</ns1:Name>
<ns1:ListOfItemDesc>
<ItemTranslation>
<ns1:DisplayName>meat</ns1:DisplayName>
<ns1:ValidationErrorMsg>12.</ns1:ValidationErrorMsg>
</ItemTranslation>
</ns1:ListOfItemDesc>
</Item>
<Item>
<ns1:Name>name4</ns1:Name>
<ns1:ListOfItemDesc>
<ItemTranslation>
<ns1:DisplayName>zseafood</ns1:DisplayName>
<ns1:ValidationErrorMsg>12.</ns1:ValidationErrorMsg>
</ItemTranslation>
</ns1:ListOfItemDesc>
</Item>
</ListOfItems>
</ItemSet>
此轉換 ( 標識規則的替代):
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="urn:/Items/data">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Item[.//ns1:DisplayName[starts-with(., 'z')]]"/>
</xsl:stylesheet>
當應用於提供的XML文檔時 :
<ItemSet xmlns:ns1="urn:/Items/data">
<ns1:ObjectName>com</ns1:ObjectName>
<ListOfItems>
<Item>
<ns1:Name>name1</ns1:Name>
<ns1:ListOfItemDesc>
<ItemTranslation>
<ns1:DisplayName>fruits</ns1:DisplayName>
<ns1:ValidationErrorMsg>120</ns1:ValidationErrorMsg>
</ItemTranslation>
</ns1:ListOfItemDesc>
</Item>
<Item>
<ns1:Name>name2</ns1:Name>
<ns1:ListOfItemDesc>
<ItemTranslation>
<ns1:DisplayName>vegetables</ns1:DisplayName>
<ns1:ValidationErrorMsg>24.</ns1:ValidationErrorMsg>
</ItemTranslation>
</ns1:ListOfItemDesc>
</Item>
<Item>
<ns1:Name>name3</ns1:Name>
<ns1:ListOfItemDesc>
<ItemTranslation>
<ns1:DisplayName>meat</ns1:DisplayName>
<ns1:ValidationErrorMsg>12.</ns1:ValidationErrorMsg>
</ItemTranslation>
</ns1:ListOfItemDesc>
</Item>
<Item>
<ns1:Name>name4</ns1:Name>
<ns1:ListOfItemDesc>
<ItemTranslation>
<ns1:DisplayName>zseafood</ns1:DisplayName>
<ns1:ValidationErrorMsg>12.</ns1:ValidationErrorMsg>
</ItemTranslation>
</ns1:ListOfItemDesc>
</Item>
</ListOfItems>
</ItemSet>
產生想要的正確結果 :
<ItemSet xmlns:ns1="urn:/Items/data">
<ns1:ObjectName>com</ns1:ObjectName>
<ListOfItems>
<Item>
<ns1:Name>name1</ns1:Name>
<ns1:ListOfItemDesc>
<ItemTranslation>
<ns1:DisplayName>fruits</ns1:DisplayName>
<ns1:ValidationErrorMsg>120</ns1:ValidationErrorMsg>
</ItemTranslation>
</ns1:ListOfItemDesc>
</Item>
<Item>
<ns1:Name>name2</ns1:Name>
<ns1:ListOfItemDesc>
<ItemTranslation>
<ns1:DisplayName>vegetables</ns1:DisplayName>
<ns1:ValidationErrorMsg>24.</ns1:ValidationErrorMsg>
</ItemTranslation>
</ns1:ListOfItemDesc>
</Item>
<Item>
<ns1:Name>name3</ns1:Name>
<ns1:ListOfItemDesc>
<ItemTranslation>
<ns1:DisplayName>meat</ns1:DisplayName>
<ns1:ValidationErrorMsg>12.</ns1:ValidationErrorMsg>
</ItemTranslation>
</ns1:ListOfItemDesc>
</Item>
</ListOfItems>
</ItemSet>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.