【问题标题】:Extract tags from xml in string to array从字符串中的xml中提取标签到数组
【发布时间】:2015-04-18 22:53:37
【问题描述】:

我想将字符串变量中接收到的以下 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,我的活动]

【问题讨论】:

  • 如果您不会遇到嵌套标签或不以特殊方式处理根级别 + 1 以下的结构信息,则 sax 解析器就足够了。但是,在这种情况下,您可能根本不需要解析。

标签: java xml xpath sax


【解决方案1】:

对于解析器的比较,look here。出于您的目的,SAX 看起来是最佳选择。

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

【讨论】:

    【解决方案2】:

    我不确定性能,但下面的代码是一种简单的方法来做你想做的事:

    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。在那里运行示例代码可以满足您的任何需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多