XPath查询的循环结果运行两次?

时间:2012-08-26 11:52:38

标签: java xml loops xpath repeat

我想打印出一个将查询与|结合的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>

1 个答案:

答案 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”)。

问题解决了。