我正在启动一个Android应用程序,它将从Web解析XML。我已经创建了一些Android应用程序,但他们从未涉及解析XML,我想知道是否有人有关于最佳方式的任何提示?
答案 0 :(得分:9)
以下是一个例子:
try {
URL url = new URL(/*your xml url*/);
URLConnection conn = url.openConnection();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(conn.getInputStream());
NodeList nodes = doc.getElementsByTagName(/*tag from xml file*/);
for (int i = 0; i < nodes.getLength(); i++) {
Element element = (Element) nodes.item(i);
NodeList title = element.getElementsByTagName(/*item within the tag*/);
Element line = (Element) title.item(0);
phoneNumberList.add(line.getTextContent());
}
}
catch (Exception e) {
e.printStackTrace();
}
在我的示例中,我的XML文件看起来有点像:
<numbers>
<phone>
<string name = "phonenumber1">555-555-5555</string>
</phone>
<phone>
<string name = "phonenumber2">555-555-5555</string>
</phone>
</numbers>
我会将/*tag from xml file*/
替换为“phone”,将/*item within the tag*/
替换为“string”。
答案 1 :(得分:1)
我总是使用w3c dom类。我有一个静态帮助器方法,我用它来解析xml数据作为字符串,并返回给我一个Document对象。你得到的xml数据可能会有所不同(网络,文件等),但最终你把它作为一个字符串加载。
像这样...... Document document = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try
{
builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(data));
document = builder.parse(is);
}
catch (SAXException e) { }
catch (IOException e) { }
catch (ParserConfigurationException e) { }
答案 2 :(得分:1)
有不同类型的解析机制可用,一个是SAX Here is SAX parsing example,第二个是DOM解析Here is DOM Parsing example.。从你的问题来看,目前尚不清楚你想要什么,但这些可能是一个很好的起点。
答案 3 :(得分:1)
我知道有三种类型的解析:DOM,SAX和XMLPullParsing。
在我的示例中,您需要URL和XML元素的父节点。
try {
URL url = new URL("http://www.something.com/something.xml");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
NodeList nodeList1 = doc.getElementsByTagName("parent node here");
for (int i = 0; i < nodeList1.getLength(); i++) {
Node node = nodeList1.item(i);
}
} catch(Exception e) {
}
另请尝试this。
答案 4 :(得分:0)
如果XML文件不是太大,我会使用DOM解析器,它不如SAX高效,因为在这种情况下它更容易。
我只创建了一个Android应用程序,它涉及XML解析。从SOAP Web服务接收的XML。我用过XmlPullParser。来自Xml.newPullParser()的实现有一个错误,即对文档的承诺,对nextText()的调用并不总是前进到END_TAG。有一个解决方法。