【问题标题】:Avoid repeated instantiation of InputSource with XPath in Java避免在 Java 中使用 XPath 重复实例化 InputSource
【发布时间】:2011-07-30 22:04:27
【问题描述】:

目前我正在使用 XPath 表达式解析 XML 消息。它工作得很好。但是我有以下问题:

我正在解析 XML 的全部数据,因此我为每次调用 xPath.evaulate 实例化一个新的 InputSource

StringReader xmlReader = new StringReader(xml);
InputSource source = new InputSource(xmlReader);
XPathExpression xpe = xpath.compile("msg/element/@attribute");
String attribute = (String) xpe.evaluate(source, XPathConstants.STRING);

现在我想深入了解我的 XML 消息并评估更多信息。为此,我发现自己需要再次实例化源。这是必需的吗?如果我不这样做,我会收到 Stream closed Exceptions。

【问题讨论】:

    标签: java xml parsing xpath


    【解决方案1】:

    将 XML 解析为 DOM 并保留对节点的引用。示例:

    XPath xpath = XPathFactory.newInstance()
        .newXPath();
    InputSource xml = new InputSource(new StringReader("<xml foo='bar' />"));
    Node root = (Node) xpath.evaluate("/", xml, XPathConstants.NODE);
    System.out.println(xpath.evaluate("/xml/@foo", root));
    

    这样可以避免多次解析字符串。

    如果您必须将InputSource 重用于不同的XML 字符串,您可以将setters 与不同的阅读器实例一起使用。

    【讨论】:

    • 您能否详细说明“这可以避免多次解析字符串”。 ?我不明白,您的解决方案也不使用 XPathExpression 类。另外,你能帮我回答下面的帖子吗? stackoverflow.com/questions/33758074/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2021-05-02
    • 1970-01-01
    相关资源
    最近更新 更多