0

我想打印出将查询与 | 组合在一起的 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());
            }
        }

问题是它打印出这个:

长度
140
120
长度
140
120

虽然它只应该打印出来(我的预期结果):

长度
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>
4

1 回答 1

0

谢谢 OR Mapper,解决了我的问题。

修复:从 Exercise1 类的构造函数
中 删除loadData()(与 loadData() 的内容相同的类,如我的问题所示)。

问题是 loadData() 已经在其他地方被调用:
在我的Controller类的构造函数中:

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) 练习 1 实例调用loadData()

我通过输入来解决它:

System.out.println("testing1"); 在 try{} 块的开头

System.out.println("testing2") 在 try{} 块的末尾。

问题解决了。

于 2012-08-26T12:49:36.200 回答