【问题标题】:XML formatted Java string manipulationXML 格式的 Java 字符串操作
【发布时间】:2011-10-04 17:58:50
【问题描述】:

我正在开发一个具有node(computer) 对象的插件,其属性如下:

String name
String description
String labels
Launcher computerLauncher
...

我可以将 node(computer) 对象转换为 XML 格式的字符串,例如:

String xml = jenkins.instance.toXML(node);

这给了我一个字符串:

<name>Computer1</name>
<description>This is a description</description>
<labels>label1 label2</labels>
<launcher>windows.object.launcher.12da1</launcher>

那我可以反过来:

Node node = jenkins.instance.fromXML(xml);

我没有更改节点属性的方法,所以我想将其转换为 XML,更改 som 属性,然后再次使其成为节点。

我看到两个选项

  1. 使用一些字符串方法操作 XML 以替换 标记之间的所有内容。

  2. 尝试将 XML 字符串转换为类似于真实对象的东西并以这种方式对其进行操作。

不确定什么是最好的方法。

【问题讨论】:

  • 绝对不要尝试字符串替换;或转换为 JSON(直接转到 json->xml 或 xml->json 绝不是好主意,IMO)。转到 XML 对象(XOM、DOM4J、DOM)或 Java POJO (JAXB)

标签: java xml string json jenkins


【解决方案1】:

既然已经支持所有使用 Java 的 DOM(文档对象模型)API 的东西,为什么还要发明新东西?

使用 DocumentBuilderFactory 获取 DocumentBuilder 并创建 Document 实例。有了这个,您可以在 toXML 方法中创建“节点”对象(请注意,您发布的示例实际上是 not 有效的 XML,它缺少根节点),将文档序列化为字符串可能是使用Transformer 完成。

使用 DOM API,您还可以修改现有元素的属性。

在 DocumentBuilder 的帮助下,使用 DocumentBuilder#parse 再次实现从 XML 字符串中解析 Document 实例。

如果您的 DOM 操作不太复杂,这应该是实现目标的好方法。

【讨论】:

    【解决方案2】:

    最近我不得不操作大型 XML 文件(我的软件必须动态创建一些 XML 文件并从其他一些 XML 文件中获取输入数据)。为此,我使用了JAXB,这是一个非常简洁的 API,可以自动将 XML 文件编组为 Java 对象,并将 Java 对象编组为 XML 文件。

    但是,我必须创建一个 XSD 文件来指定我需要从中读取和写入的 XML。

    因此,JAXB 比 DOM 需要更多的设置工作,所以如果您的需求很简单,我建议您使用 DOM,但是如果您的需求更复杂,那么我建议您使用 JAXB。

    【讨论】:

    • JAXB 不要求您具有 XML 模式。您可以从 Java 对象开始,并根据需要应用注释以将这些对象映射到 XML:wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted
    • +1 for above -- 尽管许多教程都提到了模式,但大多数常见的用例在明确避免它们时要简单得多,而是使用基本的 bean 访问器,可能还有用于自定义的注释
    【解决方案3】:

    对我来说,使用类似 DOM 的方法是有意义的。但不要使用 DOM 本身:有更好的替代品,如 JDOM 和 XOM,它们的 API 更友好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 2014-03-21
      • 1970-01-01
      相关资源
      最近更新 更多