我需要检索父节点以及仅匹配特定属性值的子节点。输入XML是
<ErrorList>
<Table name="Table1" type="A">
<Error category="Minor">
<errorCode>100</errorCode>
<errorMessage>msg-100</errorMessage>
</Error>
<Error category="Major">
<errorCode>101</errorCode>
<errorMessage>msg-101</errorMessage>
</Error>
</Table>
<Table name="Table2" type="B">
<Error category="Fatal">
<errorCode>102</errorCode>
<errorMessage>msg-102</errorMessage>
</Error>
<Error category="Major">
<errorCode>105</errorCode>
<errorMessage>msg-101</errorMessage>
</Error>
</Table>
</ErrorList>
下面的XSL代码检索具有类别属性Fatal或Minor的错误节点:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" />
<xsl:template match="Error[@category = 'Fatal'] | Error[@category = 'Minor']">
<xsl:copy-of select="self::node()"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
我得到的输出:
<Error category="Minor">
<errorCode>100</errorCode>
<errorMessage>msg-100</errorMessage>
</Error><Error category="Fatal">
<errorCode>102</errorCode>
<errorMessage>msg-102</errorMessage>
</Error>
预期输出低于(需要检索select子节点的父表节点):
<Table name="Table1" type="A">
<Error category="Minor">
<errorCode>100</errorCode>
<errorMessage>msg-100</errorMessage>
</Error>
</Table>
<Table name="Table2" type="B">
<Error category="Fatal">
<errorCode>102</errorCode>
<errorMessage>msg-102</errorMessage>
</Error>
</Table>
你能帮我用xsl来获得所需的输出。
答案 0 :(得分:0)
这是一个产生所需结果的样式表:
<xsl:template match="Error[@category = 'Fatal'] | Error[@category = 'Minor']">
<xsl:copy-of select="self::node()"/>
</xsl:template>
<xsl:template match="Table">
<Table>
<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
<xsl:attribute name="type"><xsl:value-of select="@type"/></xsl:attribute>
<xsl:apply-templates/>
</Table>
</xsl:template>
<xsl:template match="text()"/>