如何在XSLT中基于属性删除XML元素

时间:2013-09-17 16:59:50

标签: xml xslt xpath xquery

我正在努力解决一些基本的XSLT问题。我想从某些XML中删除一个元素,具体取决于它是否没有某个属性(在本例中为PriorValue)。

XML看起来像这样 XML不仅限于以下部分,它还有很多其他部分,同样的逻辑也适用于它们。

   <Emp>
       <Personal>
            <First_Name>abc</First_Name>
            <Last_Name>xyz</Last_Name>
            <Gender>1</Gender>
            <Birth_Date PriorValue="1980-08-05">1980-09-05</Birth_Date>
            <Country_of_Birth PriorValue="600">724</Country_of_Birth>
            <Marital_Status PriorValue="0">1</Marital_Status>
        </Personal>
        <Info>
            <Name>abc</Name>
            <ID>Part time</ID>
            <NoOfProbationDays>0</NoOfProbationDays>
            <EMPtype>0</EMPtype>
            <CountryOfBirth PriorValue="IND">ESP</CountryOfBirth>
        </Info>
    </Emp>

所需的XML输出如下所示。

    <Emp>
        <Personal>
            <Birth_Date PriorValue="1980-08-05">1980-09-05</Birth_Date>
            <Country_of_Birth PriorValue="600">724</Country_of_Birth>
            <Marital_Status PriorValue="0">1</Marital_Status>
        </Personal>
        <Info>
            <CountryOfBirth PriorValue="IND">ESP</CountryOfBirth>
        </Info>
    </Emp>

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

使用

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
<xsl:template>

<xsl:template match="*[not(*) and not(@PriorValue)]"/>