5

私は現在、単純なXML解析を行うためにJDOMを使用していますが、タイプセーフなものはないようです。組み込みのJava DOMパーサーを使用する場合にも同様の問題が発生しましたが、APIがさらに多くなりました。

たとえば、引数としてをXPath.selectNodes取り、Object生のリストを返します。これは、Java1.1を少し感じます。

Java用の汎用化されたXMLおよびXPathライブラリはありますか、それともタイプセーフな方法でXPathクエリを実行できない理由がありますか?

4

2 に答える 2

1

AFAIK javaのすべてのxmlクエリはタイプセーフではなく、ほとんどがjava1.3と互換性があります。つまり、私のお気に入りのパーサー/ジェネレーターはxmlプルパーサー(xmlpp)スタイルのパーサーです。xmlppライブラリとほぼ同じ1.6を使用している場合、JavaにはXmlStreamReaderとXmlStreamWriterがあると思います。私は特に、ストリームリーダーを取得してそこからプルしてFooオブジェクトを返すメソッドgetFooを記述できるのが好きです。これは、DOMとSAXの間で最高の機能です。StAXと呼ばれることもあると思います。
少しぶらぶらしているので、今はやめます

于 2010-10-03T00:54:46.793 に答える
1

HTMLのCSSセレクターに精通している場合は、 JsoupがXMLもサポートしていることを知っておくとよいでしょう。


更新:OK、それは明らかに非常に物議を醸す答えに反対票を与えられました。ただし、ノード値を選択するだけの場合は、Xpathよりも簡単で冗長性が低くなる可能性があります。JsoupAPIはつまり非常に洗練されています。もう少し具体的な例を挙げましょう。次のような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());
}

どの出力

ジェーン・ドウ
メインストリート1
パークアベニュー1

アップデート2:2012年3月にリリースされたJsoup 1.6.2以降、XML解析はJsoupAPIによって正式にサポートされています。

于 2010-10-02T22:30:54.397 に答える