【发布时间】:2011-08-17 19:02:19
【问题描述】:
我想让 Java 生成一个“0”,以防 XPath 表达式的计算结果为“假”。
我有这个 Java 代码:
//Read the input XML document
private SAXBuilder parser = new SAXBuilder();
private Document characters;
private XPath pProbs;
private List<Attribute> probs;
private Double[] dprobs;
private String pathToSourceXml;
private String content1, content2, content3, content4, content5;
characters = parser.build(pathToSourceXml);
pProbs = XPath.newInstance("/n-grams-sorted/n-gram[contains(.,"+content1+") or contains(.,"+content2+") or contains(.,"+content3+") or contains(.,"+content4+") or contains(.,"+content5+")]/@probability");
probs = (List<Attribute>) pProbs.selectNodes(characters);
...
//Return all the values of the @probability attibrutes
public Double[] getProbs(String pathToSourceXml) {
this.pathToSourceXml = pathToSourceXml;
List<Double> theDoubles = new ArrayList();
dprobs = new Double[5];
for (int i=0; i<probs.size(); i++) {
theDoubles.add(Double.parseDouble(probs.get(i).getValue()));
dprobs[i] = theDoubles.get(i);
}
return dprobs;
}
这里的问题是这段代码:
pProbs = XPath.newInstance("/n-grams-sorted/n-gram[contains(.,"+content1+") or contains(.,"+content2+") or contains(.,"+content3+") or contains(.,"+content4+") or contains(.,"+content5+")]/@probability");
只返回 4 个元素,因为 'content1' 返回 'false'。没有内容包含字符串“$ $ $”的 n-gram 节点。但是,其余内容节点的计算结果为“真”。
如果这些 contains() 表达式之一的计算结果为“假”,我必须在我的 Xaml 代码中绘制一个“0”。屏幕上必须出现“0”,例如:
'# # #' = 0.0015
'? ? ?' = 0.0047
'k i d' = 0.0012
'$ $ $' = 0
我无法获取这个“0”。我不知道怎么说:“如果没有包含'$ $ $'作为内容的节点,则返回零。
关于如何做到这一点的任何想法?
谢谢。
【问题讨论】:
-
当您可以使用 Java 创建一个时,为什么 XPath 必须返回一个
0? XPath 只能选择表单实际存在的内容。 -
无论哪种方式,如果其中一个元素不包含特定字符串 'x y z',我都会尝试获取 0。
-
你不会的。 XPath 是一种选择语言,不能保证您可以选择所需的内容。让 5 个表达式循环运行,并将结果(或 0)分别分配给数组。
标签: java xpath boolean-expression