我有这个XML:
<property id="1011">
<leasehold>No</leasehold>
<freehold>Yes</freehold>
<propertyTypes>
<propertyType>RESIDENTIAL</propertyType>
</propertyTypes>
</property>
Run Code Online (Sandbox Code Playgroud)
我想创建一个xpath语句,它与下面嵌套的if-else伪代码块相同.
if( propertyTypes/propertyType == 'RESIDENTIAL') {
if( leasehold == 'Yes' ){
return 'Rent'
} else
return 'Buy'
}
} else {
if( leasehold == 'Yes' ){
return 'Leasehold'
} else
return 'Freehold'
}
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了Becker的方法,但我无法真正遵循它.XPath真的不是我的强项.
这个Java程序使用一个三元if来映射布尔值到输出字符串:("*"表示true,空字符串表示false).
public class ternary {
public static void main(String[] args) {
boolean flags[]={true,false,true};
for (boolean f : flags) {
System.out.println(f?"*":"");
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以输出是*,[empty],*.
我有一个输入XML文档,如:
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="change.xsl"?>
<root>
<change flag="true"/>
<change flag="false"/>
<change flag="true"/>
</root>
Run Code Online (Sandbox Code Playgroud)
我有以下XSLT模板,它将true映射为'*',false映射为''(它可以工作):
<xsl:template match="change">
<xsl:variable name="flag" select="translate(substring(@flag,1,1),'tf','*')"/>
<xsl:value-of select="$flag"/>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
是否有更简洁的版本?
a)我可以直接从字符串'true | false'自动获取布尔值true | false的值吗?b)是否有(xpath?)构造将布尔值true | false映射到'*',''?
我正在尝试创建一个XPath查询,每次都会获得549个字符的文本.该文本应该是关于相关主题,在下面的例子中是oranges或apples或pears.如果页面上不存在包含这些单词的元素,那么我希望XPath查询更容易在页面上找到目标/不太具体的文本.
所以为了澄清,我试图创建一个XPath查询,找到包含特定类型文本的元素,如果使用下面的查询找到549个或更多字符,那么我们就完成了,如果没有找到或者返回的文本是少于549个字符,我希望XPath查询在段落形式的页面上获取任何文本(除了按钮,链接,菜单等文本之外的任何内容都有效)并返回此文本的549个字符,如果结果string小于549个字符我想用以下内容连接这两个查询:...在中间.
substring(normalize-space(//*[self::p or self::div][contains(text(),'apples') or contains(text(),'oranges') or contains(text(),'pears')]), 0, 549)
Run Code Online (Sandbox Code Playgroud)
我一直试图解决这个问题很长一段时间,我将不胜感激任何建议!
提前谢谢了!
我正在尝试使用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>
Run Code Online (Sandbox Code Playgroud)
那么如何在xpath中实现if else呢?
就像第二个动作来自玩家一,然后做f.ex:给它回来......
更新1:
好的,这就是我的意思:
boolean(/game/moves/roll[2]/@player=1
Run Code Online (Sandbox Code Playgroud)
如果第二个元素是玩家1,那么这会让我回来,所以现在我想添加一个其他路径,如果它会是?那么如何添加呢?