[解決済み】JavaでXPathを使ってXMLを読み込む方法
2022-04-16 21:06:42
質問
私はJavaでXPathを使用してXMLデータを読みたいので、私が収集した情報については、私は私の要件に応じてXMLを解析することができません。
以下は、私がやりたいことです。
オンラインからXMLファイルをURLで取得し、XPathでパースするのですが、その中に2つのメソッドを作りたいと考えています。1つは、特定のノード属性IDを入力し、結果としてすべての子ノードを取得するもので、もう1つは、特定の子ノードの値のみを取得するものです。
<?xml version="1.0"?>
<howto>
<topic name="Java">
<url>http://www.rgagnonjavahowto.htm</url>
<car>taxi</car>
</topic>
<topic name="PowerBuilder">
<url>http://www.rgagnon/pbhowto.htm</url>
<url>http://www.rgagnon/pbhowtonew.htm</url>
</topic>
<topic name="Javascript">
<url>http://www.rgagnon/jshowto.htm</url>
</topic>
<topic name="VBScript">
<url>http://www.rgagnon/vbshowto.htm</url>
</topic>
</howto>
上記の例では、@nameで検索するとすべての要素が読み込まれるようにしています。また、@nameの「Javascript」からのurlを1つのノード要素だけ返す関数も用意しています。
どのように解決するのですか?
このようなものが必要です。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(<uri_as_string>);
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(<xpath_expression>);
そして
expr.evaluate()
そのコードで定義されたドキュメントと、期待する戻り値の型を渡し、その結果をオブジェクト型にキャストします。
特定のXPath式について助けが必要な場合は、おそらく別の質問として尋ねるべきでしょう(それがここでの最初の質問でない限り、私はあなたの質問がJavaでのAPIの使用方法であると理解しました)。
編集部:(コメントへの返信)。このXPath式は、PowerBuilderの下で最初のURL要素のテキストを取得します。
/howto/topic[@name='PowerBuilder']/url/text()
これで2番目を取得します。
/howto/topic[@name='PowerBuilder']/url[2]/text()
このコードで得られます。
expr.evaluate(doc, XPathConstants.STRING);
もし、あるノードにいくつのURLがあるかわからない場合は、むしろこのような方法をとるべきでしょう。
XPathExpression expr = xpath.compile("/howto/topic[@name='PowerBuilder']/url");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
そして、NodeListをループさせる。
関連
-
[解決済み] getContentPane()は具体的に何をするのですか?
-
[解決済み] Java Swingで複数のボタンに対して複数のActionListenersを追加する方法
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] java.lang.IncompatibleClassChangeError: Mongo クラスを実装しています。
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] Eclipse- Dynamic Web Module 3.0 で新しいプロジェクトを作成するときに Java 1.6 以降が必要なエラーが発生する。
-
[解決済み] Java の条件付きコンパイル:コードチャンクをコンパイルしないようにするには?
-
[解決済み] JAVA_OPTIONS、JAVA_TOOL_OPTIONS、JAVA_OPTSの違いについて
-
[解決済み] Javaにおけるシンボリック参照
-
[解決済み] アクティビティに割り当てられない
-
[解決済み] IntegerからBigIntegerへの変換
-
[解決済み] java swingアプリケーションでJCEがプロバイダBCを認証できない