我正在嘗試使用StAX(我已經不喜歡它了......)
似乎使用它的唯一方法是通過連續的if-else條件。
但最重要的是,似乎沒有辦法將一個元素與其子元素相關聯,除非事先知道要解析的xml文檔的 結構。是否正確?
我曾嘗試以下: 我有這樣的XML字符串java使用StAX以通用的方式獲取兒童元素
<ns1:Root xmlns:ns1=\"http://rootNameSpace.com/\">
<ns1:A/>
<ns1:B>
<Book xmlns=\"http://www.myNameSpace.com\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">
<Data>
<Author>John</Author>
<Edition>1</Edition>
<PubHouse>Small Publishing House</PubHouse>
<Price>37.8</Price>
</Data>
</Book>
</ns1:B>
</ns1:Root>
我想用的StAX得到Book元素,但似乎我只能寫已經硬編碼所有的結構代碼。
I.e.使用XMLEventReader和一次 你得到書,開始循環數據,作者等
有沒有一個通用的解決方案呢?
我嘗試了以下方法來解決這個問題:我嘗試從String到XMLEventReader並返回String,但無法獲取我最初使用的確切String表示(名稱空間位於括號內,額外的冒號等)。
StringBuilder xml = new StringBuilder();
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
String msg = "<ns1:Root xmlns:ns1=\"http://rootNameSpace.com/\"><ns1:A/><ns1:B><Book xmlns=\"http://www.myNameSpace.com\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Data><Author>John</Author><Edition>1</Edition><PubHouse>Small Publishing House</PubHouse><Price>37.8</Price></Data></Book></ns1:B></ns1:Root>";
InputStream input = new ByteArrayInputStream(msg.getBytes("UTF-8"));
XMLEventReader xmlEventReader = inputFactory.createXMLEventReader(input);
while (xmlEventReader.hasNext())
{
XMLEvent event = xmlEventReader.nextEvent();
StringWriter sw = new StringWriter();
event.writeAsEncodedUnicode(sw);
xml.append(sw);
}
System.out.println(xml);
我得到如下:
<?xml version="1.0" encoding='UTF-8' standalone='no'?><['http://rootNameSpace.com/']:ns1:Root xmlns:ns1='http://rootNameSpace.com/'><['http://rootNameSpace.com/']:ns1:A></ns1:A><['http://rootNameSpace.com/']:ns1:B><['http://www.myNameSpace.com']::Book xmlns:='http://www.myNameSpace.com' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><['http://www.myNameSpace.com']::Data><['http://www.myNameSpace.com']::Author>John</Author><['http://www.myNameSpace.com']::Edition>1</Edition><['http://www.myNameSpace.com']::PubHouse>Small Publishing House</PubHouse><['http://www.myNameSpace.com']::Price>37.8</Price></Data></Book></ns1:B></ns1:Root>
能否這種情況下通過的StAX或DOM來解決是唯一的解決辦法?
@gustafc:通過你發佈的代碼,我知道一個元素開始了。如何獲得這個元素的所有子元素?使用DOM是微不足道的。如何使用StAX做到這一點? – Cratylus 2010-11-24 08:56:30