我有以下 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
}
所以从上面我有 myRecord 类,其中我有用于例如 ServiceProvider 等的 getter/setter。然后我还有一个用于 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 上做错了什么吗?