次の 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 で間違ったことをしていますか?