我试图从XML文件中删除所有不满足某些条件的节点 这是我的简化输入:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<unit xmlns="http://www.srcML.org/srcML/src">
<Rowsets>
<Rowset>
<Row>
<FirstName>Michael</FirstName>
<LastName>David</LastName>
<Phone>1234567890</Phone>
</Row>
<Row>
<FirstName>David</FirstName>
<LastName>Michael</LastName>
<Phone>01234567890</Phone>
</Row>
<Row>
<FirstName>Yang</FirstName>
<LastName>Christina</LastName>
<Phone>2345678901</Phone>
</Row>
<Row>
<FirstName>Grey</FirstName>
<LastName>Meredith</LastName>
<Phone>3456789012</Phone>
</Row>
<Row>
<FirstName>Michael</FirstName>
<LastName>Shepherd</LastName>
<Phone>5678901234</Phone>
</Row>
</Rowset>
</Rowsets>
<Tag>
<FirstName>Michael</FirstName>
<LastName>Shepherd</LastName>
<Phone>5678901234</Phone>
</Tag>
</unit>
我想编写一个XSLT转换文件,该文件将能够删除所有没有FirstName
类型子项且价值为Michael
的子节点。
对于我刚刚提供的输入,我想获得此输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<unit xmlns="http://www.srcML.org/srcML/src">
<Row>
<FirstName>Michael</FirstName>
<LastName>David</LastName>
<Phone>1234567890</Phone>
</Row>
<Row>
<FirstName>Michael</FirstName>
<LastName>Shepherd</LastName>
<Phone>5678901234</Phone>
</Row>
<Tag>
<FirstName>Michael</FirstName>
<LastName>Shepherd</LastName>
<Phone>5678901234</Phone>
</Tag>
</unit>
这是我现在写的转换文件:
<xsl:stylesheet
xmlns="http://www.srcML.org/srcML/src"
xmlns:src="http://www.srcML.org/srcML/src"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template name="removingNotMichael" match="*[child::src:FirstName[.= 'Michael']]">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
</xsl:template>
</xsl:stylesheet>
它不会产生任何东西,只是一个完全空的文件。 有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
你可以试试这个:
<xsl:template match="/">
<unit>
<xsl:copy-of select="//*[src:FirstName = 'Michael']"/>
</unit>
</xsl:template>