0

我正在尝试解析 xml,但没有成功,xml 是:

<Menu> 
<sunday> 
<food Type="soups">someVal</food>  
<food Type="soups">someVal</food>   
</sunday>  
</Menu>

我在android中解析使用:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

这就是我尝试解析它的方式:

                doc.getDocumentElement().normalize();
            typesList = doc.getElementsByTagName("sunday");
            Node node = typesList.item(0);
            Element fstElmnt = (Element) node;
            Attr marakim = fstElmnt.getAttributeNode("soups");
            NodeList marakimList = marakim.getChildNodes();
            Element nameElement = (Element) marakimList.item(0);
            marakimList = nameElement.getChildNodes();
            String test = ((Node)marakimList.item(0)).getNodeValue();

我得到 nullPointerException

09-12 16:22:13.703: W/System.err(22570): java.lang.NullPointerException
09-12 16:22:13.710: W/System.err(22570):    at com.bugs3.udios.shultz.ShultzDayChoice$foodTypesTask.doInBackground(ShultzDayChoice.java:116)
09-12 16:22:13.714: W/System.err(22570):    at com.bugs3.udios.shultz.ShultzDayChoice$foodTypesTask.doInBackground(ShultzDayChoice.java:1)
09-12 16:22:13.714: W/System.err(22570):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
09-12 16:22:13.730: W/System.err(22570):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-12 16:22:13.734: W/System.err(22570):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-12 16:22:13.734: W/System.err(22570):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
09-12 16:22:13.734: W/System.err(22570):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
09-12 16:22:13.738: W/System.err(22570):    at java.lang.Thread.run(Thread.java:856)

有没有更好的方法来解析带有属性的 xml?

非常感谢您的帮助

4

3 回答 3

2

尽管我的 xml 中没有属性,但我就是这样做的。你只需要做类似的事情

Element element2 = element.getAttribute("type");

或者在你使用 .getElementsByTagName 之后类似的东西

NodeList nodeList = doc.getElementsByTagName("ConfigIn");
            for(int i = 0; i < nodeList.getLength(); i++)
            {
                Node node = nodeList.item(i);
                if(node.getNodeType() == Node.ELEMENT_NODE)
                {
                    Element element = (Element) node;
                    NodeList nodelist = element.getElementsByTagName("eclairag");
                    Element element1 = (Element) nodelist.item(0);
                    NodeList fstNm = element1.getChildNodes();
                    config_eclairag = fstNm.item(0).getNodeValue();

希望这可以在某种程度上帮助你......

于 2012-09-12T13:41:01.597 回答
1

该属性的名称是“Type”,但您正在寻找一个名为“soups”的属性。

于 2012-09-12T14:34:59.330 回答
0

好的,所以我扔了文档,搜索后发现以下内容:

使用 DOM 解析器解析 XML 中的属性

并成功解析带有属性的 xml:

                String tst;

                Node sundayNode = doc.getElementsByTagName("sunday").item(0);
                Element sundayElem = (Element)sundayNode;
                Node foodNode = sundayElem.getElementsByTagName("food").item(0);


                NamedNodeMap  attrs = foodNode.getAttributes();

                for (int a = 0; a < attrs.getLength(); a++) 
                {
                        Node theAttribute = attrs.item(a);


                        tst = theAttribute.getNodeName() + "=" + theAttribute.getNodeValue();
                 }

感谢大家的帮助

于 2012-09-13T08:06:17.130 回答