-1

我有一个给定 XML 文档中可能存在或不存在的术语(字符串)列表。我需要在属性值中查找这个字符串,如果找到,返回它自己的标签和它的父标签。我怎样才能在 Java 中做到这一点?

编辑:我遇到了多种使用 DOM Parser 或 SAX Parser 或自己编写的方法。我想知道最有效的方法。

4

4 回答 4

0

您可以在 Xml 文档上运行 XPath 表达式:

InputSource source= new InputSource(new FileInputStream(doc)));
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
NodeList nodes = (NodeList)xpath.evaluate("//@*[. = \'" + myString + "\']", source, XPathConstants.NODESET);

然后,您可以使用生成的 NodeList 来获取包含的节点对象及其父节点。

于 2012-06-27T07:59:12.103 回答
0

您可以使用 XPath;例如,//*[@* = 'something']将匹配所有 eg<a b="something"/><a b="c" d="something"><e f="g"/></a>

至于在 Java 中使用 XPath,请查看以下页面:http ://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/xpath/package-summary.html

于 2012-06-27T07:54:19.677 回答
0

自己找到了答案。我用这个

SAXParserFactory spfac = SAXParserFactory.newInstance();
SAXParser sp = spfac.newSAXParser();
EMSAXParser handler = new EMSAXParser(this.terms);

然后我实现了以下方法,同时使用堆栈为每个开始推入并为每个结束标记弹出。当找到文本时,搜索完成,然后如果在文本中找到该术语,则查看堆栈的上两个元素。

startElement(String uri, String localName, String qName, Attributes attributes);
characters(char[] buffer, int start, int length);
endElemnet(String uri, String localName, String qName);

感谢大家的帮助。

于 2012-06-27T13:43:07.127 回答
0

用于 XML 处理的 Java API (JAXP)

用于 XML 处理的 Java API (JAXP) 使应用程序能够使用独立于特定 XML 处理器实现的 API 来解析、转换、验证和查询 XML 文档。JAXP 提供了一个可插拔层,使供应商能够提供他们自己的实现,而无需在应用程序代码中引入依赖关系。

Java XPath API

XPath 表达式比详细的文档对象模型 (DOM) 导航代码更容易编写。当您需要从 XML 文档中提取信息时,最快和最简单的方法是在您的 Java 程序中嵌入一个 XPath 表达式。Java 5 引入了 javax.xml.xpath 包,这是一个独立于 XML 对象模型的库,用于使用 XPath 查询文档。

于 2012-06-27T07:54:50.563 回答