我是Android开发的新手,我使用的是Android 2.2,因此可以选择使用XPath进行开发,我认为这是一个不错的选择。
我希望提取的代码格式为:
<?xml version="1.0" encoding="UTF-8"?>
<ams xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<?xml-stylesheet type="text/xsl" href="XSLDoc.xsl"?>
<toGo>
<SMS>
<ID>1</ID>
<to>07700000008</to>
<body>Hi Alice, This is just a test message.</body>
</SMS>
<SMS>
<ID>2</ID>
<to>07700000009</to>
<body>Hi Bob, This is just a test message.</body>
</SMS>
</toGo>
</ams>
我查看了XPath API,他们的Foo示例对我来说还不够好。有人使用XPath来收集这样的信息并将其存储在arraylist中吗?
如果您认为我的XML很糟糕,请随意使用您的回复/评论建议更好的结构。建设性的批评欢迎!
提前致谢,
编辑: 一次可能生成0,1,2或500+个SMS块。
答案 0 :(得分:1)
感谢SamG指出我走在正确的道路上,原谅双关语。
他的回答是70%准确,如果没有他的帮助,我将无法管理它。如果其他人在解决方案之后:
ArrayList smsList = new ArrayList();
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("myXMLFile.xml");
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("//SMS");
NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
NodeList items = nodes.item(i).getChildNodes();
String id = items.item(1).getTextContent();
String to = items.item(3).getTextContent();
String body = items.item(5).getTextContent();
SMS sms = new SMS(id,to,body);
smsList.add(sms);
}
我不知道为什么节点被计数1,3,5而不是0,1,2。但是这个解决方案对我有用,希望将来可以帮助别人。如果其他人能够解释它为什么有效,我将非常感谢你的意见。
答案 1 :(得分:0)
我建议制作一个SMS对象并创建这些对象的ArrayList。然后,您可以使用类似的内容解析XML。
ArrayList<SMS> smsList = new ArrayList<SMS>();
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("myXMLFile.xml");
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("//SMS");
NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
NodeList items = nodes.item(i).getChildNodes();
String id = items(0).getNodeValue();
String to = items(1).getNodeValue();
String body = items(2).getNodeValue();
SMS sms = new SMS(id,to,body);
smsList.add(sms);
}