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

属性の名前は「タイプ」ですが、「スープ」という名前の属性を探しています。

于 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 に答える