一个不错的JavaXMLDOM实用程序
我发现自己一次又一次地编写相同的冗长DOM操作代码:一个不错的JavaXMLDOM实用程序,java,xml,dom,Java,Xml,Dom,我发现自己一次又一次地编写相同的冗长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); //
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
。原因如下:
Element e3 = dom(document).findOne("some-other-name");
我这里的重要要求是,我明确希望在org.w3c.dom.Document
上操作
org.w3c.dom.Document
转换为JDOM、dom4j等似乎是个坏主意。我更喜欢用适配器包装它
如果它不存在,我可能会使用自己的jRTF语法,因为这个jRTF语法看起来非常好!对于XML,它似乎很容易实现,因为只有很少的节点类型。从fluentapi的角度来看,这可能会变得和jquery一样强大 详细说明我的评论,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开发人员提供了非常好的功能(元素迭代器、活动元素列表等)好吧,这可能很愚蠢,但是为什么不自己实现这个小API呢?我相信您对domapi非常了解,实现您想要的东西不会花费太多时间
BTW考虑使用XPath进行文档操作(也可以在这一点上实现Mini API)。
< P>我发现一些工具大致符合我的问题:Dom4J几乎完全做到了这一点,但它有自己的DOM实现。如果您想重建此功能,请继续,但如果我是您,我会使用Dom4J。@Sean,在我看来,Dom4J和DOM本身一样冗长。但也许我在稀少的文档中遗漏了fluent API?除此之外,我更喜欢库是否实际在
org.w3c.dom
结构上运行,而不是创建自己的库我知道您出于某种原因正在注销JAXB,如果您有或可以为输入文件创建XSD,它为您生成所有的代码进行解组和封送处理,并为您提供一个很好的真实Java对象模型。@Jarrod:原因是:没有XSD,XML可以任意复杂,数据源来自数据库,标记是数据库列,或其转换,编组和解组将意味着对相当大的文档等需要额外的转换步骤,我想稍后使用XSLT进行处理,因此标准DOM可能是最佳选择,或者包装DOM……好的,看起来类似。但我也要详细说明我的评论…;-)我不想创建新文档,但要对现有文档进行操作(它们非常大,所以性能/内存是一个问题)。所以,我猜,Dom4J不允许这样做?@Lukas当然它允许您操作现有文档,但我猜性能/内存需求对于大型文档来说应该是不好的。我没有将Dom4J用于大于几百K的文档,所以我不知道。它是通过将org.w3c.dom.Document
转换为org.Dom4J.Document
来实现的,对吗?这就是我想要避免的…@Lukas它允许您修改现有的Dom4J文档:-)仅供参考,Dom4J与DOM(Xerces)相比,内存占用要低得多。谢谢您的提示。正如我所说的,如果这还不存在,我将推出我自己的。关于使用XPath而不是DOM,请阅读我的。如果可能的话,出于性能原因,应该阻止XPath。是的,我也注意到了XPath的性能问题,我主要使用直接DOM操作,正如您之前所写的。不管怎样,我经常会在使用任何“标准”api时实现自己的迷你api,因为它大多不适合我。为什么不呢,如果你给我你的电子邮件或任何联系人:-)我几乎完成了jquery到Java的基本端口:。那里还有一个用户组,如果你愿意贡献,你可以在那里与我联系!我有一个类似的项目,但它只用于流式输出(因此它对内存非常友好,因为它不加载整个DOM)。
<?xml version="1.0" encoding="UTF-8"?>
<some-name attr1="val1" attr2="val2"><some-other-name/></some-name>