English 中文(简体)
Java Anders : XML 达到tag价值
原标题:Java Android : XML Parsing getting the value of a tag

我试图打上Xml文档,但似乎不理解它是如何运作的。 我已经花了几个小时,但似乎无法得到正确的价值。 我已设法使该守则为跟踪名单标签工作,但并非为反馈名单标签及其儿童标签工作。

I m would like to have the values of a playback device, in the future more will be added.

这是Xml来源:

<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<tracklist>
    <track>track001.mp3</track>
    <track>track002.mp3</track>
    <track>track003.mp3</track>
    <track>track004.mp3</track>
    <track>track005.mp3</track>
    <track>track006.mp3</track>
    <track>track007.mp3</track>
    <track>track008.mp3</track>
    <track>track009.mp3</track>
    <track>track010.mp3</track>
</tracklist>
<playbacklist>
    <playback>
        <name>Speaker1</name>
        <ip>192.168.1.103</ip>
        <room>Kitchen</room>
        <options>0</options>
        <state>NotPlaying</state>
    </playback>
</playbacklist>
</root>

这是《 j法》(法典版):该法典正在为我工作。

DocumentBuilder db = factory.newDocumentBuilder();
Document doc = db.parse(inStream);
NodeList nodeList = doc.getElementsByTagName("root");

for (int index = 0; index < nodeList.getLength(); index++) {
Node node = nodeList.item(index);
if (node.getNodeType() == Node.ELEMENT_NODE) {
    Element element = (Element) node;
    NodeList nameNode = element.getChildNodes();
    for (int iIndex = 0; iIndex < nameNode.getLength(); iIndex++) {
        if (nameNode.item(iIndex).getNodeType() == Node.ELEMENT_NODE) {
                Element nameElement = (Element) nameNode.item(iIndex);
                    if(nameElement.getNodeName().equals("tracklist")){
                NodeList trackNodes = nameElement.getChildNodes();
            for(int i=0;i<trackNodes.getLength();i++){
                if (trackNodes.item(i).getNodeType() == Node.ELEMENT_NODE) {
                    Element trackElement = (Element) trackNodes.item(i);
                    playlist.add(trackElement.getFirstChild().getNodeValue());
                    }
                }
            } 

这部法典对我来说是徒劳的:

        if(nameElement.getNodeName().equals("playbacklist")){
            NodeList devicesNodes = nameElement.getChildNodes();
            for(int j=0;j<=devicesNodes.getLength();j++){
                Node nodeDevice = devicesNodes.item(j);
                NodeList childNodes = nodeDevice.getChildNodes();
最佳回答

http://sherifandroid.blogspot.com/10/sax-class-generator-v10.html

package sherif.java.sax;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class YourHandler extends DefaultHandler
{
    //TAGS      /Sherif/
    private boolean root = false;
    private boolean playbacklist = false;
    private boolean playback = false;
    private boolean name = false;
    private boolean ip = false;
    private boolean room = false;
    private boolean options = false;
    private boolean state = false;
    private boolean tracklist = false;
    private boolean track = false;

    public YourHandler()
    {
        //TODO      /Sherif/
    }

    @Override
    public void startDocument() throws SAXException
    {
        super.startDocument();
        //TODO      /Sherif/
    }

    @Override
    public void endDocument() throws SAXException
    {
        super.endDocument();
        //TODO      /Sherif/
    }

    @Override
    public void characters(char sherifCh[], int sherifSt, int sherifle)
    {
        String value = (new String(sherifCh)).substring(sherifSt, sherifSt + sherifle);
        if(root)
        {
            if(playbacklist)
            {
                if(playback)
                {
                    if(name)
                    {
                        //TODO      /Sherif/

                    }
                    else if(ip)
                    {
                        //TODO      /Sherif/

                    }
                    else if(room)
                    {
                        //TODO      /Sherif/

                    }
                    else if(options)
                    {
                        //TODO      /Sherif/

                    }
                    else if(state)
                    {
                        //TODO      /Sherif/

                    }
                }
            }
            else if(tracklist)
            {
                if(track)
                {
                    //TODO      /Sherif/

                }
            }
        }
    }

    @Override
    public void startElement(String sherifUr, String sherifNa, String sherifQn, org.xml.sax.Attributes sherifAt) throws SAXException
    {
        super.startElement(sherifUr, sherifNa, sherifQn, sherifAt);
        if(sherifNa.equals("root"))
        {
            this.root = true;
        }
        else if(sherifNa.equals("playbacklist"))
        {
            this.playbacklist = true;
        }
        else if(sherifNa.equals("playback"))
        {
            this.playback = true;
        }
        else if(sherifNa.equals("name"))
        {
            this.name = true;
        }
        else if(sherifNa.equals("ip"))
        {
            this.ip = true;
        }
        else if(sherifNa.equals("room"))
        {
            this.room = true;
        }
        else if(sherifNa.equals("options"))
        {
            this.options = true;
        }
        else if(sherifNa.equals("state"))
        {
            this.state = true;
        }
        else if(sherifNa.equals("tracklist"))
        {
            this.tracklist = true;
        }
        else if(sherifNa.equals("track"))
        {
            this.track = true;
        }
    }

    @Override
    public void endElement(String sherifUr, String sherifNa, String sherifQn) throws SAXException
    {
        super.endElement(sherifUr, sherifNa, sherifQn);
        if(sherifNa.equals("root"))
        {
            this.root = false;
        }
        else if(sherifNa.equals("playbacklist"))
        {
            this.playbacklist = false;
        }
        else if(sherifNa.equals("playback"))
        {
            this.playback = false;
        }
        else if(sherifNa.equals("name"))
        {
            this.name = false;
        }
        else if(sherifNa.equals("ip"))
        {
            this.ip = false;
        }
        else if(sherifNa.equals("room"))
        {
            this.room = false;
        }
        else if(sherifNa.equals("options"))
        {
            this.options = false;
        }
        else if(sherifNa.equals("state"))
        {
            this.state = false;
        }
        else if(sherifNa.equals("tracklist"))
        {
            this.tracklist = false;
        }
        else if(sherifNa.equals("track"))
        {
            this.track = false;
        }
    }
}

您可以使用:

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

/* Create a new instance of the class generated */  
YourHandler handler = new YourHandler ();  
xr.setContentHandler(handler);  

InputSource inputSource = new InputSource();  
inputSource.setEncoding("UTF-8");  
inputSource.setCharacterStream(new StringReader(response));  

/* Start Parsing */  
xr.parse(inputSource);  
/* Parsing Done. */  
问题回答

我将建议你使用<代码>SAX parser, 容易和高效使用。

https://stackoverflow.com/questions/4827344/how-to-parse-xml-using-the-sax-parser/4828765#48765” • 如何利用SRP的教区划出XML





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签