0

親ノードと、特定の属性値に一致する子ノードのみを取得する必要があります。入力 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 である Error ノードを取得します。

<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>

予想される出力は次のとおりです (選択した子ノードの親テーブル ノードを取得する必要があります)。

   <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 を手伝ってくれませんか。

4

1 に答える 1