XPath / XSLT / Axes选择包括self在内的所有兄弟

时间:2014-12-10 15:46:41

标签: xml xslt xpath axes

我认为有一个简单的轴或其他东西可以选择所有兄弟姐妹的文本,包括自我,但我似乎无法找到它。

XML:

<panelTabs>
 <field></field>
 <field></field>
</panelTabs>

我目前在<xsl:template match="panelTabs/field>,我需要在此模板中。我想检查每个<field>中的所有值是否为空,我该怎么做?

修改
更具体一点。我希望我的XSLT是这样的:

<xsl:template match="panelTabs/field>
 <xsl:if test="allfieldshaventgottext = true">
  <p>All are empty</p>
 </xsl:if>
 <xsl:if test="thereisafieldwithtext = true">
  <p>There is a field with text</p>
 </xsl:if>
</xsl:template>

xsl:if代替xsl:when

修改 我创造了一个新的,更加解释的问题。我在这里:XPath/XSLT select all siblings including self

2 个答案:

答案 0 :(得分:2)

您可以使用../*选择所有兄弟姐妹,包括当前元素(或../field,以专门选择field元素。)

所以在你的情况下,你可以这样做:

<xsl:template match="panelTabs/field">
 <xsl:if test="not(../field[normalize-space()])">
  <p>All are empty</p>
 </xsl:if>
 <xsl:if test="../field[normalize-space()]">
  <p>There is a field with text</p>
 </xsl:if>
</xsl:template>

Example with some non-blank

Example with all blank

但是,使用模式匹配会更加惯用:

<xsl:template match="panelTabs/field">
  <p>All are empty</p>
</xsl:template>

<xsl:template match="panelTabs[field[normalize-space()]]/field" priority="2">
  <p>There is a field with text</p>
</xsl:template>

Example with some non-blank

Example with all blank

如果您只想检查所有字段是否为空白,则可以执行以下操作:

<xsl:template match="panelTabs[not(field[normalize-space()])]">
  <p>All are empty</p>
</xsl:template>

<xsl:template match="panelTabs/field">
  <p><xsl:value-of select="." /></p>
</xsl:template>

<xsl:template match="panelTabs/field[not(normalize-space())]" priority="2" />

答案 1 :(得分:0)

如果您检查not(../field[not(normalize-space())]),那么您就知道没有空字段或仅包含空格。