避免在 Java 中使用 XPath 重复实例化 InputSource
Posted
技术标签:
【中文标题】避免在 Java 中使用 XPath 重复实例化 InputSource【英文标题】:Avoid repeated instantiation of InputSource with XPath in Java 【发布时间】: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。
【问题讨论】:
【参考方案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 类。另外,你能帮我回答下面的帖子吗? ***.com/questions/33758074/…以上是关于避免在 Java 中使用 XPath 重复实例化 InputSource的主要内容,如果未能解决你的问题,请参考以下文章