我发现自己一遍又一遍地编写相同的详细DOM操作代码:
Element e1 = document.createElement("some-name");
e1.setAttribute("attr1", "val1");
e2.setAttribute("attr2", "val2");
document.appendChild(e1);
Element e2 = document.createElement("some-other-name");
e.appendChild(e2);
// Etc, the same for attributes and finding the nodes again:
Element e3 = (Element) document.getElementsByTagName("some-other-name").item(0);
现在,我不想一直切换架构,即我不想使用JDOM,JAXB或其他任何东西。只是Java的org.w3c.dom
。原因是
我只是想知道是否有一个不错的包装器库(例如apache commons或google)允许我用类似于jRTF的流畅风格来做这样的事情:
// create a wrapper around my DOM document and manipulate it:
// like in jRTF, this code would make use of static imports
dom(document).add(
element("some-name")
.attr("attr1", "val1")
.attr("attr2", "val2")
.add(element("some-other-name")),
element("more-elements")
);
然后
Element e3 = dom(document).findOne("some-other-name");
我在这里的重要要求是我明确希望对org.w3c.dom.Document
因此将org.w3c.dom.Document
转换为JDOM,dom4j等似乎是一个坏主意。用适配器包装它是我更喜欢的。
如果它不存在,我可能会自己动手,因为这个jRTF语法看起来非常好!对于XML,它似乎很容易实现,因为只有很少的节点类型。从流畅的API角度来看,这可能会像jquery一样强大!
答案 0 :(得分:4)
为了详细说明我的评论,Dom4J让你非常接近你想要的东西:
final Document dom = DocumentHelper.createDocument().addElement("some-name")
.addAttribute("attr1", "val1")
.addAttribute("attr2", "val2")
.addElement("some-other-name").getDocument();
System.out.println(dom.asXML());
输出:
<?xml version="1.0" encoding="UTF-8"?>
<some-name attr1="val1" attr2="val2"><some-other-name/></some-name>
我知道它不是本机DOM,但它非常相似,它为Java开发人员提供了非常好的功能(元素迭代器,实时元素列表等)。
答案 1 :(得分:4)
我发现了一些工具大致按照我的要求提出了我的要求:
然而,与此同时,我更倾向于自己推出。我真的是jquery的忠实粉丝,我认为jquery可以映射到Java流畅的API:
答案 2 :(得分:1)
嗯,这可能很傻,但为什么不自己实现这个小API呢?我相信你很了解DOM API,并且不需要花费太多时间来实现你想要的东西。
顺便说一下,考虑使用XPath进行文档操作(你也可以在这个上实现你的mini-api)。