2011-02-24 122 views
1

我对Android开发非常陌生,我使用的是Android 2.2,因此可以选择使用XPath进行开发,我认为这是一个不错的选择。需要Android 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和他们富的例子是不够好,对我来说,它的工作了。任何人使用XPath收集这样的信息,并可能将其存储在数组列表中?

如果您觉得我的XML非常糟糕,请随时在回复/评论中提供更好的结构。建设性的批评欢迎!

由于提前,

编辑: 可以有0,1,2,或在一个时间产生500+ SMS块。

+0

那么,你想选择哪些节点?请更好地定义问题。 – 2011-02-24 14:32:49

+0

我需要提取所有数据,最好采用以下格式: mySMSArray.add(ID,to,body); 为每个SMS块。 – Dech 2011-02-24 14:35:51

+0

对于将来的问题:XPath只选择节点或者评估为原子数据类型(XPath 1.0中的字符串,数字和布尔值)。如果你想将一些节点实例翻译成主机语言的另一种数据类型,那么这显然是一种宿主语言任务。 – 2011-02-24 16:28:26

回答

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。但是这个解决方案对我有用,并且希望将来可以帮助其他人。如果其他人能够解释为什么它正在工作,我会非常感激地接受你的意见。

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);  
}