0

我有一个 XPath 表达式,我想在 XSLT 中使用它

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