我想打印出一个将查询与|结合的XPath表达式的组结果运营商。 (它有效,但有问题)
我的XPath表达式是:
//y-axis-title/text() | /bar-chart/bars/bar[@number='4']/value/text() |//bar[@number='5']/value/text()
我的代码:
public void loadData() {
dl.loadDocuments("input\\bars.xml");
try {
XPath yAxisTitle = XPath.newInstance("//y-axis-title/text() | /bar-chart/bars/bar[@number='4']/value/text() | //bar[@number='5']/value/text()");
List<Text> elements = (List<Text>)yAxisTitle.selectNodes(dl.getInputDocument());
for(int i=0; i<elements.size(); i++){
System.out.println(elements.get(i).getText());
}
} catch (JDOMException jde){
System.out.println("JDOMException at Exercise1.loadData(): "+ jde.getMessage());
}
}
问题在于它打印出来:
Length 140 120 Length 140 120
虽然它只打算打印出来(我的预期结果):
Length 140 120
某些地方必须执行我的循环两次。我不知道它是什么。这对我来说没有意义,因为在该分组表达式中有3个结果集,因此计数器是3.我在调试时检查了这个。这个'2'(即运行两次)来自哪里?
如何解决此问题,以便获得预期结果?
感谢。
编辑:示例 bars.xml
<?xml version="1.0"?>
<bar-chart>
<title>Bar Chart: Lengths</title>
<x-axis-title>Items</x-axis-title>
<y-axis-title>Length</y-axis-title>
<value>25</value>
<bars>
<bar number="1">
<value>90</value>
</bar>
</bars>
</bar-chart>
答案 0 :(得分:0)
感谢O. R. Mapper,解决了我的问题。
<强>修正强>:
从Exercise1类的构造函数中删除 loadData()(与loadData()的内容相同的类,如我的问题所示)。
问题是loadData()已在其他地方被调用:
在我的控制器类的构造函数中:
public SimpleXPathController(ISimpleXPath doc){
model = doc;
model.loadData();
}
以及Exercise1类的构造函数:
public Exercise1(){
dl = new DocumentLoader();
loadData();
}
最后,在我的UI课程中,我接到了这个电话:
SimpleXPathController simpleXPathController = new SimpleXPathController(new Exercise1());
导致:
1)控制器调用 loadData()
2)Exercise1实例调用 loadData()
我把它弄成了麻烦:
的System.out.println( “testing1”);在try {}块的开头
和
try {}块结束时的System.out.println(“testing2”)。
问题解决了。