特定のXMLドキュメントに存在する場合と存在しない場合がある用語(文字列)のリストがあります。属性値でこの文字列を探す必要があります。見つかった場合は、独自のタグとその親のタグを返します。Javaでこれを行うにはどうすればよいですか?
編集:DOMパーサーまたはSAXパーサーを使用して複数の方法に出くわしたか、自分で作成しました。私はそれを行うための最も効率的な方法を知りたいです。
特定のXMLドキュメントに存在する場合と存在しない場合がある用語(文字列)のリストがあります。属性値でこの文字列を探す必要があります。見つかった場合は、独自のタグとその親のタグを返します。Javaでこれを行うにはどうすればよいですか?
編集:DOMパーサーまたはSAXパーサーを使用して複数の方法に出くわしたか、自分で作成しました。私はそれを行うための最も効率的な方法を知りたいです。
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
XML処理用のJavaAPI(JAXP)を使用すると、アプリケーションは、特定のXMLプロセッサーの実装に依存しないAPIを使用して、XML文書を解析、変換、検証、および照会できます。JAXPは、ベンダーがアプリケーションコードに依存関係を導入することなく、独自の実装を提供できるようにするプラグアビリティレイヤーを提供します。
XPath式は、詳細なDocument Object Model(DOM)ナビゲーションコードよりもはるかに簡単に記述できます。XMLドキュメントから情報を抽出する必要がある場合、最も速くて簡単な方法は、Javaプログラム内にXPath式を埋め込むことです。Java 5では、XPathを使用してドキュメントをクエリするためのXMLオブジェクトモデルに依存しないライブラリであるjavax.xml.xpathパッケージが導入されています。
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を使用して、含まれているノードオブジェクトとその親ノードを取得できます。
自分で答えを見つけました。これを使った
SAXParserFactory spfac = SAXParserFactory.newInstance();
SAXParser sp = spfac.newSAXParser();
EMSAXParser handler = new EMSAXParser(this.terms);
次に、スタックを使用して開始ごとにプッシュインし、終了タグごとにポップアウトするときに、次のメソッドを実装しました。また、テキストが見つかった場合は検索が行われ、テキスト内で用語が見つかった場合は、スタックの上位2つの要素がピークになります。
startElement(String uri, String localName, String qName, Attributes attributes);
characters(char[] buffer, int start, int length);
endElemnet(String uri, String localName, String qName);
みなさん、ありがとうございました。