0

特定のパラメーターと等しい属性を持つ目的のノードのみを含むサブ XML ツリーを抽出するために、大きな XML ファイルをクエリする必要があります。

ここに私のソースファイルがあります

            <a:level1 xmlns:a="some:a" xmlns:b="some:b"
                      xmlns:c="some:c" xmlns:d="some:d">
                <a:level2>
                    <b:level3>
                        <b:date a:value="TODAY">
                            <c:level4>
                                <d:level5>
                                    <d:level6 a:value="AAA">
                                        <d:level7 a:value="AAA_AAA">
                                            <d:level8 a:value="XXX/123">
                                                <d:leaf a:value="150415">
                                                    <b:leaf1>100</b:leaf1>
                                                    <b:leaf2>100</b:leaf2>
                                                </d:leaf>
                                                <d:leaf a:value="200814">
                                                    <b:leaf1>1961</b:leaf1>
                                                    <b:leaf2>1961</b:leaf2>
                                                </d:leaf>
                                            </d:level8>
                                        </d:level7>
                                    </d:level6>
                                    <d:level6 a:value="BBB">
                                        <d:level7 a:value="BBB_BBB">
                                            <d:level8 a:value="XXX/123">
                                                <d:leaf a:value="1505">
                                                    <b:leaf1>0.42</b:leaf1>
                                                    <b:leaf2>0.42</b:leaf2>
                                                </d:leaf>
                                            </d:level8>
                                        </d:level7>
                                    </d:level6>
                                </d:level5>
                            </c:level4>
                        </b:date>
                    </b:level3>
                </a:level2>
            </a:level1>

ここに私のスタイルシートがあります:

        <?xml version="1.0" encoding="UTF-8"?>
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:a="xmlCache">
            <xsl:param name="myparam" as="xs:string" required="no"/>
            <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
            <xsl:strip-space  elements="*"/>

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

            <xsl:template match="@*">
                <xsl:message><xsl:value-of select="@a:value"/></xsl:message>
                <xsl:if test="@a:value=$myparam">
                    <xsl:call-template name="identity"/>
                </xsl:if>
            </xsl:template>
        </xsl:stylesheet>

しかし、それは機能していないようです。誰か助けてくれませんか?

更新: 質問が明確でなくて申し訳ありません。サブセット XML ツリー全体を抽出したいと考えています。たとえば、param が AAA の場合、出力は次のようになります。

            <a:level1 xmlns:a="some:a" xmlns:b="some:b"
                      xmlns:c="some:c" xmlns:d="some:d">
                <a:level2>
                    <b:level3>
                        <b:date a:value="TODAY">
                            <c:level4>
                                <d:level5>
                                    <d:level6 a:value="AAA">
                                        <d:level7 a:value="AAA_AAA">
                                            <d:level8 a:value="XXX/123">
                                                <d:leaf a:value="150415">
                                                    <b:leaf1>100</b:leaf1>
                                                    <b:leaf2>100</b:leaf2>
                                                </d:leaf>
                                                <d:leaf a:value="200814">
                                                    <b:leaf1>1961</b:leaf1>
                                                    <b:leaf2>1961</b:leaf2>
                                                </d:leaf>
                                            </d:level8>
                                        </d:level7>
                                    </d:level6>
                                </d:level5>
                            </c:level4>
                        </b:date>
                    </b:level3>
                </a:level2>
            </a:level1>
4

1 に答える 1