当前位置: 首页 > 面试题库 >

一个不错的Java XML DOM实用程序

吕嘉荣
2023-03-14
问题内容

我发现自己一次又一次地写同样的冗长的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。原因是

  1. 这是关于一个古老而又大的遗留系统
  2. XML已在许多地方使用,并且XSLT进行了多次转换以获得XML,HTML和PDF输出
  3. 我只是在寻找方便,没有什么大变化。

我只是想知道是否有一个不错的包装库(例如,使用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

  1. 已经存在
  2. 很大
  3. 需要相当多的操纵

因此,将转换org.w3c.dom.Document为JDOM,dom4j等似乎是个坏主意。我更喜欢用适配器包装它。

如果不存在,我可能会自己动手,因为这种jRTF语法看起来非常不错!对于XML,由于节点类型很少,因此似乎很容易实现。从流畅的API角度来看,这可能与jquery一样强大!


问题答案:

我发现一些工具可以大致满足我在问题中的要求:

  • http://code.google.com/p/xmltool/
  • http://jsoup.org/

但是,与此同时,我更倾向于自己动手。我真的非常喜欢jquery,并且我认为jquery可以映射到Java fluent API:

http://www.jooq.org/products/jOOX



 类似资料:
  • 问题内容: 我在一台计算机上用Eclipse Java Mars编写了一个大型程序,效果很好。我将程序导出为可运行的Jar文件,并且运行它没有任何问题。即使我将整个项目导出到另一台计算机上,该程序仍然可以运行。 当我对该项目进行细微更改时,问题在另一台计算机上出现。这些更改仅是基于内容的更改,不应对程序的功能有所影响。 从eclipse运行程序似乎没有问题。 但是,当我想运行新创建的Jar文件时,

  • 问题内容: 我想防止在Java中启动应用程序的多个实例。我知道两种方法: 锁定文件 锁紧插座 但是,哪一个是更有效且更易于使用的呢?我应该使用哪一个? 同样欢迎任何其他解决方案。 问题答案: 编辑:我尝试使用Win200864b(版本不重要)和JFrame并通过JFrame在SystemTray中移动到Front()或图标化。DO_NOTHING_ON_CLOSE

  • 我有一个如下所示的MainWindowFx类。它基本上创建了一个简单的GUI。 现在我想在另一个类中使用此对象的实例: 但是当我运行这个时,我遇到了这个错误: 我对此做了一些搜索,并猜测它与线程有关。。。但我还是不知道。有什么建议吗?

  • 这可能不是典型的设置,但由于更高的决策,我们最终在一个应用程序中有多个 kafka 集群,每个集群有多个主题,每个集群可能具有不同的序列化策略。Json/avro.avro可能与融合的架构注册表一起使用,或者使用单个对象编码。 好吧,我通过构建自己的抽象和注册中心,分析配置并手动创建大部分内容,以某种方式实现了它,但我觉得我需要在几个地方多次重复主题名称、模式注册url等内容,以便创建所有需要的b

  • 我正在努力学习vue。因此,我制作了一个小应用程序,可以显示来自API的新闻文章,并在另一个视图中允许用户登录到另一台服务器。 为此,我使用Axios。我知道我在某个时候让它工作得很好,但是今天当我开始我的项目时,让两个API同时工作是不可能的。 这是我的登录服务: 这是我的新闻服务: 这两个服务都位于不同的JS文件中,并导入到不同的vue文件中,但现在它们似乎无法共存,并且总是有一个服务覆盖另一

  • 我试图部署以下web应用程序与heroku: https://github.com/darego1990/web1 虽然我收到以下生成日志错误,但我不确定原因: NPM ERR!Linux4.4.0-1031-aws npm ERR!argv"节点"/tmp/build_f85d5b0987590f76e56a2945b6c4ccc1/. heroku/节点/bin/npm"运行"构建"npm E