0

XSLT で使用したい XPath 式があります。

checks/check/INFOS/INFO[msg[starts-with(@id,"Start")] and not(msg[starts-with(@id,"Finished")])]

次の XML をチェックします。

<checks>
  <check id="a" level="INFO">
        <INFOS>
            <INFO id="">
                <msg id="Start checking"/>
                <msg id="xxx"/>
                <msg id="Finished checking"/>
            </INFO>
        </INFOS>
    </check>
    <check id="b" level="INFO">
        <INFOS>
            <INFO id="">
                <msg id="Start checking ."/>
                <msg id="yyy"/>
            </INFO>
        </INFOS>
    </check>
</checks>

見つかった/返されたノード:

<INFO id=""> 
  <msg id="Start checking ."/>  
  <msg id="yyy"/> 
</INFO>

それで大丈夫です。しかし、問題は、返された場合、そのようなノードをどのように変換できますか? または、それが返されたかどうか、または存在するかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

2

XSLT で要素を呼び出す<xsl:apply-templates />と、<checks>次のように、情報メッセージのテンプレートで適切な一致を得ることができるはずです。

<xsl:template match="checks">
    <h1>Here are my Info messages</h1>
    <div id="info">
        <xsl:apply-templates select="check/INFOS/INFO"/>
    </div>
</xsl:template>

<xsl:template match="check/INFOS/INFO[msg[starts-with(@id,"Start")]
                     and not(msg[starts-with(@id,"Finished")])]">
    <!-- Do Something with checks that are start messages -->
</xsl:template>

<xsl:template match="check/INFOS/INFO">
    <!-- Do Something with checks that aren't Start messages -->
    <!-- If you leave this blank, nothing will be done for them. -->
</xsl:template>
于 2013-09-15T23:22:42.957 に答える