JavaでタイプセーフXPathクエリを行うにはどうすればよいですか?
-
27-09-2019 - |
質問
私は現在、JDOMを使用して単純なXML解析を行っていますが、タイプは何も安全ではないようです。内蔵のJava Dom Parserを使用することで同様の問題がありました。
例えば、 XPath.selectNodes
取ります Object
その議論と生のリストを返すように、それはちょうど少しJava 1.1を感じます
Java用の一般化されたXMLおよびXPathライブラリはありますか、それともXPathクエリをタイプセーフで実行することができない理由がありますか?
解決
HTMLのCSSセレクターに精通している場合は、それを知っておくと良いかもしれません jsoup XMLもサポートします。
アップデート: :わかりました、それは明らかに非常に物議を醸す答えを下げて与えられました。ただし、必要なのはノード値を選択するだけで、Xpathよりも簡単で冗長になる可能性があります。 JSoup APIは非常に滑らかです。もう少し具体的な例を挙げましょう。次のように見えるXMLファイルがあると仮定してください。
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="1">
<name>John Doe</name>
<age>30</age>
<address>
<street>Main street 1</street>
<city>Los Angeles</city>
</address>
</person>
<person id="2">
<name>Jane Doe</name>
<age>40</age>
<address>
<street>Park Avenue 1</street>
<city>New York</city>
</address>
</person>
</persons>
次に、次のように移動できます。
Document document = Jsoup.parse(new File("/persons.xml"), "UTF-8");
Element person2 = document.select("person[id=2]").first();
System.out.println(person2.select("name").text());
Elements streets = document.select("street");
for (Element street : streets) {
System.out.println(street.text());
}
出力
Jane Doe Main street 1 Park Avenue 1
更新2: :2012年3月にリリースされたJSoup 1.6.2以来、XML ParsingはJSOUP APIによって正式にサポートされています。
他のヒント
AFAIK JavaのすべてのXMLクエリは非タイプセーフであり、ほとんどはJava 1.3互換です。それは私のお気に入りのパーサー/ジェネレーターがです XMLプルパーサー(XMLPP) スタイルパーサー。 Javaには、XMLPPライブラリとほぼ同じ1.6を使用している場合、JavaにはXMLStreamReaderとXMLStreamWriterがあると思います。私は特に、ストリームリーダーを取得してそこから引っ張ってFooオブジェクトを返す方法GetFooを書くことができるのが好きです。 DomとSaxの間で最高のものです。私はそれが一部の人によってStaxと呼ばれるかもしれないと思います。
私は少しランブルを取得しているので、私は今やめています