2011-04-08 61 views
0

Greetings, 我正试图解析从FTP接收到的XML。我跟着一对夫妇的教程,但他们没有工作,所以逢..我的代码是现在:解析从ftp到程序的XML

   URLConnection cn; 
       URL url = new URL(SERVICE_URL); 
       cn = url.openConnection(); 
       cn.connect(); 
       InputStream stream = cn.getInputStream(); 
       DocumentBuilder docBuild = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
       Document trDoc = docBuild.parse(stream); 

       NodeList nodes = trDoc.getElementsByTagName("Name"); 

现在我已经得到了名称中的字符串,并记录该字符串进行测试。有人能帮助我吗?

编辑: 当我这样做:

  for (int i = 0; i < nodes.getLength(); i++){ 

       String toe = nodes.item(i).toString(); 
       Log.d("toe?",""+toe); 
      // Log.d("nodes:",""+nodes.item(i)) 
       /* 
        if (nodes.item(i).getTextContent().compareTo(original) == 0){ 
         System.out.println(nodes.item(i).getTextContent() + " > " + newValue); 
         nodes.item(i).setTextContent(newValue); 
        }*/ 
      } 

我得到:

04-08 14:47:29.989: DEBUG/toe?(737): [email protected] 

XML代码:

<?xml version="1.0" encoding="UTF-8"?> 
<Personnel> 
  <Employee type="permanent"> 
        <Name>Seagull</Name> 
        <Id>3674</Id> 
        <Age>34</Age> 
   </Employee> 
  <Employee type="contract"> 
     <Name>Tom</Name> 
</Personnel> 

问候

+0

你可以张贴一些示例XML? – 2011-04-08 12:54:12

回答

0

查看最新tutoria l在我的博客上:p-xr.com
它带有一个完整的源代码Eclipse项目

希望它有帮助!

编辑:

尝试改变:

NodeList nodes = trDoc.getElementsByTagName("Name"); 

NodeList nodes = trDoc.getElementsByTagName("Employee"); 
+0

blijkbaar wilt hij XMLfunctions niet doen .. :) – Acolfen 2011-04-08 13:05:07

+0

我编辑你的文章以显示XML :-) – 2011-04-08 13:07:38

+0

尝试从我的博客下载eclipse项目。我认为它会帮助你。你可以随时在那里发表评论以及 – 2011-04-08 13:08:24

1

你也可以使用SAX解析器...它可以是这样的:

SAXParserFactory spf = SAXParserFactory.newInstance(); 
SAXParser sp = spf.newSAXParser(); 
XMLReader xr = sp.getXMLReader(); 

URL sourceUrl = new URL(xmlURL); 
xr.setContentHandler(myXMLHandler); 
xr.parse(new InputSource(sourceUrl.openStream())); 

现在你需要有一类myXML处理器扩展形式的DefaultHandler这样的:

public class MyXMLHandler extends DefaultHandler 
{ 

    Boolean currentElement = false; 
    String currentValue = null; 


    @Override 
    public void startElement(String uri, String localName, String qName,Attributes attributes) 
    throws SAXException 
    { 
     currentElement = true;    
    } 

    @Override 
    public void endElement(String uri, String localName, String qName) 
    throws SAXException 
    { 
     currentElement = false; 
    } 


    @Override 
    public void characters(char[] ch, int start, int length) 
    throws SAXException 
    { 
     if (currentElement) 
     { 
      currentValue = new String(ch, start, length); 
      currentElement = false; 
     } 


    } 

} 

现在起始元素()将在这个类得到任何起始元素...字符上获得任何价值函数被自动调用....