在XML文档中查找自我标记和父标记

时间:2012-06-27 07:45:06

标签: java xml dom xml-parsing

我有一个术语列表(字符串),它可能存在于给定的XML文档中,也可能不存在。我需要在属性值中查找此字符串,如果找到它,则返回其自己的标记及其父标记。我怎么能用Java做到这一点?

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

4 个答案:

答案 0 :(得分:0)

你可以使用XPath;例如,//*[@* = 'something']将匹配所有例如<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

答案 1 :(得分:0)

The Java API for XML Processing (JAXP)

  

用于XML处理的Java API(JAXP)使应用程序能够解析,   使用API​​转换,验证和查询XML文档   独立于特定的XML处理器实现。 JAXP   提供可插拔层,使供应商能够提供自己的   实现而不在应用程序代码中引入依赖项。

The Java XPath API

  

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

答案 2 :(得分: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来获取包含节点对象及其父节点。

答案 3 :(得分:0)

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

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

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

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

谢谢大家的帮助。