是否有任何Java库以面向对象的方式包装DOM?

时间:2011-03-08 15:14:49

标签: java xml

我正在尝试找到一个保留在DOM / XPath之上的Java库,并为XML操作提供面向对象的接口。很高兴有这样的东西,例如:

// all X... classes are from the wrapping library
XDocument xdoc = new XDocument(new File("abc.xml"));
xdoc.find("//abc/foo").find("bar").text("one two three");

类似于jQuery的东西,但是对于Java域。

6 个答案:

答案 0 :(得分:1)

只有一个想到的是JDOM(http://www.jdom.org)。

答案 1 :(得分:1)

如果Groovy仍然符合“for Java domain”的要求,您还可以签出Groovy's XMLSlurper,它可用于解析/更新XML。

答案 2 :(得分:1)

JAXB之类的东西会对你有用吗?

您可以将树解析为一组可以使用的Java对象,而不是使用XML的概念。如果你对JPA很熟悉,那么JAXB看起来很自然。

甚至可以使用XJC从XSD文件自动创建Java对象。

答案 3 :(得分:0)

XMLBeans是最好的Java / XML对象框架:

http://xmlbeans.apache.org/

但您需要为正在解析的XML使用XSD。然后你做了类似的事情:

abcDocument.Factory.parse(new File("abc.xml");
abcType[] abcs = abcDocument.getAbc().getAbcArray();
for (abcType abc : abcs) {
  abc.getFoo().getBar();
}

答案 4 :(得分:0)

我刚才问了同样的问题:

A nice Java XML DOM utility

我发现这些解决方案类似:

但是xmltool没有jQuery的流畅API那么强大,gwtquery和jsoup是为带有CSS等的HTML文档构建的,jsoup不包装org.w3c.dom但是创建了自己的非标准DOM模型

所以我自己动手:

http://code.google.com/p/joox/

一些例子:

// Find the order at index for and add an element "paid"
$(document).find("orders").children().eq(4).append("<paid>true</paid>");

// Find those orders that are paid and flag them as "settled"
$(document).find("orders").children()
           .find("paid").after("<settled>true</settled>");

// Add a complex element
$(document).find("orders").append(
  $("order", $("date", "2011-08-14"),
             $("amount", "155"),
             $("paid", "false"),
             $("settled", "false")).attr("id", "13");

答案 5 :(得分:0)

我创建了自己的:jcabi-xml。它包装了DOM和XPath,例如:

XML xml = new XMLDocument(
  "<orders><order id="4">Coffee to go</order></orders>"
);
String id = xml.xpath("//order/@id").get(0);
String name = xml.xpath("//order[@id=4]/text()");
System.out.println(xml.toString());