4

我试图弄清楚如何最好地翻译这个:

<Source><properties>
  ....
  <name>wer</name>
  <delay>
    <type>Deterministic</type>
    <parameters length="1">
      <param value="78" type="Time"/>
    </parameters>
  </delay>
  <batchSize>
    <type>Cauchy</type>
    <parameters length="2">
      <param value="23" type="Alpha"/>
  <param value="7878" type="Beta"/>
    </parameters>
  </batchSize>
 ...
</properties></Source>

进入:

<Source><properties>
  ....
  <name>wer</name>
  <delay>
    <Deterministic Time="78"/>
  </delay>
  <batchSize>
      <Cauchy Alpha="23" Beta="7878"/>
  </batchSize>
 ........
</properties></Source>

我尝试过使用 DocumentBuilderFactory,但是虽然我可以访问名称标签的值,但我无法访问延迟/批处理部分中的值。这是我使用的代码

Element prop = (Element)propertyNode;

NodeList nodeIDProperties = prop.getElementsByTagName("name");
Element nameElement = (Element)nodeIDProperties.item(0);

NodeList textFNList = nameElement.getChildNodes();
String nodeNameValue = ((org.w3c.dom.Node)textFNList.item(0)).getNodeValue().trim();

//--------
NodeList delayNode = prop.getElementsByTagName("delay");

调用 getElementByName("type") 或 "parameters" 似乎没有返回任何我可以使用的东西。我是否遗漏了什么,或者是否有更清洁的方法来处理现有的 xml。

需要采用已定义的格式以允许 Castor 进行编组和解组。

任何帮助将非常感激。

4

4 回答 4

6

有多种方法可以转换 XML。

1)您可以使用XSLT(XSL 转换)来转换XML。它是一种基于 XML 的语言,用于将 XML 文档转换为其他 XML 文档、文本或 HTML。语法很难学。然而,它是一个强大的 XML 转换工具。 是一个教程。对于将 XSLT 与 Java 一起使用,我会推荐Saxon,它还附带了一个很好的文档。使用 XSLT 的最大优点是转换可以在单独的模板中进行外部化。因此,您的 Java 代码不会被翻译内容混淆。然而,如前所述,学习曲线肯定更陡峭。

2) 您可以使用XPath轻松选择节点。XPath 是一种用于在 XML 文档中选择节点的查询语言。顺便说一下,XPath 也用于 XSLT。例如 XPath 查询

//delay[type = 'Deterministic']/parameters/param/@value

选择包含在节点中的所有参数value,这些参数是包含值为“确定性”的节点param的子节点。是一个用于测试 XPath 查询的不错的 Web 应用程序。是一个如何在 Java 中使用 XPath 的教程,这里是关于 XPath 的一般性教程。您可以使用 XPath 表达式在 Java 代码中选择正确的节点。恕我直言,这比直接使用 DOM 对象模型更具可读性和可维护性(正如您已经了解到的那样,这有时也是不言而喻的)。delaytype

3) 您可以使用Smooks进行XML 转换。如果转换变得相当复杂,这将特别有用。Smooks 从输入 XML 填充对象模型,并通过模板机制使用 Freemarker 或 XSL 模板输出结果 XML。Smooks 具有非常高的吞吐量,并用于 ESB 等高性能环境(例如 JBoss ESB、Apache ServiceMix)。不过,对于您的情况,可能会被压倒。

4)您可以使用Freemarker进行转换。我没有这方面的经验,但据我所知,它可以相当简单地使用。请参阅文档的“声明式 XML 处理”部分(另请参阅“公开 XML 文档”以了解如何阅读源 XML)。对我来说似乎相当简单。如果你用这种方法试试运气,我很想听听。

于 2010-03-04T07:50:16.577 回答
1

这看起来像是 XPATH 或其他一些 XML 转换 API 的工作。

查看:http ://www.ibm.com/developerworks/library/x-javaxpathapi.html

于 2010-03-04T07:36:20.943 回答
0

虽然 XSLT 可能是做到这一点的最佳方式,但如果您想使用 JVM 编程语言并且想学习不同的方法,您可以尝试scala的 xml 转换库。

一些博客文章:

http://scala.sygneca.com/code/xml-pattern-matching

http://debasishg.blogspot.com/2006/08/xml-integration-in-java-and-scala.html

于 2010-03-04T10:13:28.120 回答
0

XSLT 最终成为了前进的方向。它实际上很容易使用,w3schools 示例是一个很好的起点。

于 2010-03-05T21:23:23.503 回答