如何解析包含XML标记的String,以便我可以获得所有子标记的值

时间:2016-04-21 20:46:26

标签: java xml string parsing

我必须解析一个包含XML标签的String,如下面的硬编码,这样我就可以分别得到所有标签的值。我在这里使用

NodeList node = doc.getElementsByTagName("event");

返回值为" ajain1AnkitJain24-04-199223:09.08"

我想检索每个标记的值,并将其分别存储在不同的变量中。

例如,在这种情况下,我希望将值存储为:

String UID = ajain1
String FirstName = Ankit
String LastName = Jain
Date date = "24-04-1992 23:09.08"

以下是我正在处理的示例代码。

package test;

import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class Demo {

    public static void main(String[] args) {

        String xmldata = "<event><class></class><data><UID><![CDATA[ajain1]]></UID><FIRSTNAME><![CDATA[Ankit]]></FIRSTNAME><LASTNAME><![CDATA[Jain]]></LASTNAME><DATE><![CDATA[24-04-1992]]></DATE><TIME><![CDATA[23:09.08]]></TIME></data></event>";

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = null;
        try {
            db = dbf.newDocumentBuilder();
            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(xmldata));
            try {
                Document doc = db.parse(is);
                //String message = doc.getDocumentElement().getTextContent();
                //System.out.println(message);

                NodeList node = doc.getElementsByTagName("event");

            } catch (SAXException e) {
                // handle SAXException
            } catch (IOException e) {
                // handle IOException
            }
        } catch (ParserConfigurationException e1) {
            // handle ParserConfigurationException
        }
        // TODO Auto-generated method stub
    }
}

如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

NodeList已经是包含所有请求节点的列表,但我不得不承认,我发现它的实现非常值得怀疑。它基本上是一个包含所请求节点作为子节点的节点。它的实现与其他列表实现没有任何共同之处 - 它甚至没有实现List接口。我不知道如何处理[!CDATA],但要遍历所有event代码,您必须执行以下操作:

NodeList eventList = doc.getElementsByTagName("event");
for(int i = 0; i < eventList.getLength(); i++) {
  Element eventElement = (Element) eventList.item(i);
  // do some stuff with it
}

通过此元素,您还可以使用getElementsByTagName获取有关名字等所需的信息。是的,它可能会以许多嵌套循环结束......