我有一个给定 XML 文档中可能存在或不存在的术语(字符串)列表。我需要在属性值中查找这个字符串,如果找到,返回它自己的标签和它的父标签。我怎样才能在 Java 中做到这一点?
编辑:我遇到了多种使用 DOM Parser 或 SAX Parser 或自己编写的方法。我想知道最有效的方法。
我有一个给定 XML 文档中可能存在或不存在的术语(字符串)列表。我需要在属性值中查找这个字符串,如果找到,返回它自己的标签和它的父标签。我怎样才能在 Java 中做到这一点?
编辑:我遇到了多种使用 DOM Parser 或 SAX Parser 或自己编写的方法。我想知道最有效的方法。
您可以在 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 来获取包含的节点对象及其父节点。
您可以使用 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
自己找到了答案。我用这个
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);
感谢大家的帮助。
用于 XML 处理的 Java API (JAXP) 使应用程序能够使用独立于特定 XML 处理器实现的 API 来解析、转换、验证和查询 XML 文档。JAXP 提供了一个可插拔层,使供应商能够提供他们自己的实现,而无需在应用程序代码中引入依赖关系。
XPath 表达式比详细的文档对象模型 (DOM) 导航代码更容易编写。当您需要从 XML 文档中提取信息时,最快和最简单的方法是在您的 Java 程序中嵌入一个 XPath 表达式。Java 5 引入了 javax.xml.xpath 包,这是一个独立于 XML 对象模型的库,用于使用 XPath 查询文档。