0

次の XML ファイルがあります -

<?xml version="1.0" encoding="UTF-8"?>
<BatchOrders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <BatchHeader>
     <ServiceProvider>123456789</ServiceProvider>
     </BatchHeader>
   <OrderDetails>
     <MessageType>HelloWorld</MessageType>
  <IssueDateTime>22/01/2012 00:00:00</IssueDateTime> 
  <receivedDateTime>22/01/2012 00:00:00</receivedDateTime> 
     <Status>TestStatus</Status>
  </OrderDetails>
  </BatchOrders>

コンテンツを読み込んで、作成したフィールドに設定したい。だから私は以下のコードを持っています(いくつかは省略されていません-表示する必要があると思うものを含めました.以下は私が作成したテストクラスにあります-私はまた、このクラスの一部としてXML ファイルは問題なくディスクに保存されますが、私が直面している問題は、上記のファイルを読み取って、読み取った内容をコンソールに表示することです。

File        myFileRead = null;
FileReader  myFileReader = null;

try {

myFileRead    = new File("C:/Path/myfile.xml");
myRecord = new myRecord();
myFileReader = new FileReader(myFileRead);

myXPathReader reader = new myXPathReader(myFileReader);

while (reader.hasNext())
{
       record = reader.next();

//prints out then to cosole
}

したがって、上から、ServiceProvider などのゲッター/セッターを持つ myRecord クラスがあります。次に、次のことを行う myXpathReader のクラスもあります。

    private Document document;
    private List     batchorders;
    private Iterator iterator;

    public myXPathReader (Reader myFileReader)
    throws Exception 
    {
        SAXBuilder builder = new SAXBuilder();
        document = builder.build(myFileReader);      

        batchorders = new JDOMXPath("//BatchOrders").selectNodes(document);

        iterator = batchorders.iterator();
    }

   public int getSize() { return batchorders.size(); }

   public boolean hasNext() { return iterator.hasNext(); }


   public myRecord next() 
    throws Exception {

        Element element = (Element) iterator.next();


        myRecord record = new myRecord();

      record.setServiceProvider((new JDOMXPath("./ServiceProvider").stringValueOf(element)));
      //Some more sets ans close class etc...

コードをデバッグすると、iterator.next の要素の後に、ファイルの内容が正しく読み込まれていることがわかります。しかし、私のコンソールでは ServiceProvider 値と実際にはすべての値が空の文字列 "" に設定されています。XML から値を取得するために、JDOMXPath で間違ったことをしていますか?

4

1 に答える 1

2

あなたの例では、XMLServiceProviderは の子ではありません。その間にBatchOrders別のレベル ( BatchHeader) があります。したがって、2 番目の XPath 式はおそらく

BatchHeader/ServiceProvider

それ以外の./ServiceProvider

于 2012-11-15T15:25:15.867 に答える