从字符串中的xml中提取标记到数组

时间:2015-02-18 02:51:51

标签: java xml xpath sax

我想将在string变量中收到的xml数据提取到列表中。是否最好使用SAX解析器或Xpath,这是最快的方式?

如果你能引导我一些代码,也会有所帮助。

输入字符串

<TestEventEntity xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Sid>u34u5i435b4ih5b</Sid>
<UserId>9485924857429857</UserId>
<TestPercentId>4957493574395</TestPercentId>
<TestGroup>test2</TestGroup>
<SessionStartDt>2015-02-17T08:38:18.5179128-06:00</SessionStartDt>
<Event>my Event</Event>
</TestEventEntity>

预期输出

[u34u5i435b4ih5b,9485924857429857,4957493574395,test2,2015-02-17T08:38:18.5179128-06:00,my event]

2 个答案:

答案 0 :(得分:0)

用于比较解析器look here。为了您的目的,SAX看起来是最好的选择。

对于SAXParser的代码:您需要一个XML流或文件和一个Handler类(描述为here

答案 1 :(得分:0)

我不确定性能,但以下代码是您想要的简单方法:

File xmlFile = new File("path/to/file.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();
//Get childs of root tag
NodeList elementsUnderRootTag = doc.getElementsByTagName("rootTagName").item(0).getChildNodes();
//Iterating over childs of root node
for (int i = 0; i < elementsUnderRootTag.getLength(); i++) {
    Node child = elementsUnderRootTag.item(i);
    if (child.getNodeType() == Node.ELEMENT_NODE) {
        Element elm = (Element) child;
        System.out.pringln(elm.getTextContent());
    }
}

有关解析xml文件(或字符串)的不同类型的更多信息,请查看here。您可以在那里运行示例代码。