2

我正在尝试使用 xpath。

这是我用于实验的 xml:

<moves>
    <roll player="1">6</roll>
    <piece nr="1" player="1" field="1"/>
    <roll player="2">4</roll>
    <roll player="2">6</roll>
    <piece nr="5" player="2" field="11"/>
    <roll player="1">4</roll>
    <piece nr="1" player="1" field="5"/>
    <roll player="2">6</roll>
    <piece nr="5" player="2" field="17"/>
    <roll player="1">6</roll>
    <piece nr="2" player="1" field="1"/>
    <roll player="2">6</roll>
    <piece nr="6" player="2" field="11"/>
</moves>

那么如何在 xpath 中实现 if else 呢?

就像第二个动作来自玩家一,然后做 f.ex.: 把它还给...

更新 1:

好的,这就是我的意思:

boolean(/game/moves/roll[2]/@player=1

如果第二个元素是否是玩家 1,这会返回给我,所以现在我想添加一个 else-Path,如果它会这样?那么如何添加呢?

4

1 回答 1

7

使用如下所示的 XPath 2.0 表达式

if(/moves/roll[2]/@player eq '1')
  then 'player: 1'
  else ('player: ', data(/moves/roll[2]/@player) )

基于 XSLT 2.0 的验证:

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xsl:output method="text"/>

 <xsl:template match="/">
  <xsl:sequence select=
  "if(/moves/roll[2]/@player eq '1')
      then 'player: 1'
      else ('player: ', data(/moves/roll[2]/@player) )
  "/>
 </xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<moves>
    <roll player="1">6</roll>
    <piece nr="1" player="1" field="1"/>
    <roll player="2">4</roll>
    <roll player="2">6</roll>
    <piece nr="5" player="2" field="11"/>
    <roll player="1">4</roll>
    <piece nr="1" player="1" field="5"/>
    <roll player="2">6</roll>
    <piece nr="5" player="2" field="17"/>
    <roll player="1">6</roll>
    <piece nr="2" player="1" field="1"/>
    <roll player="2">6</roll>
    <piece nr="6" player="2" field="11"/>
</moves>

对上述 XPath 表达式求值,并将求值结果复制到输出:

player:  2
于 2012-05-19T18:38:11.890 回答