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

どこかで何かが私のループを2回実行しているに違いありません。何なのかわかりません。そのグループ化された式内に3つの結果セットがあり、そのためカウンターが3であるため、私には意味がありません。デバッグ中にこれを確認しました。この「2」(つまり、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) loadData()
の呼び出しを行う Exercise1 インスタンス



System.out.println("testing1");を入力してトラブルシューティングを行いました。try{} ブロックの先頭に、
System.out.println
("testing2") を try{} ブロックの末尾に配置します。

問題が解決しました。

于 2012-08-26T12:49:36.200 に答える