我正试图弄清楚如何最好地翻译这个:
<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,但是当我可以访问name标签的值时,我无法访问延迟/批处理部分中的值。这是我用的代码
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进行编组和解组。
非常感谢任何帮助。
答案 0 :(得分:5)
有多种方法可以转换XML。
1)您可以使用XSLT (XSL Transformations)转换XML。它是一种基于XML的语言,用于转换其他XML文档,文本或HTML中的XML文档。语法很难学。但它是XML转换的强大工具。 Here是一个教程。对于使用XSLT和Java,我建议使用Saxon,它还附带一个很好的文档。使用XSLT的最大优点是转换可以在单独的模板中外部化。因此,您的Java代码不会被翻译内容混淆。然而,如上所述,学习曲线肯定更陡峭。
2)您可以使用XPath轻松选择节点。 XPath是一种用于选择XML文档中的节点的查询语言。顺便提一下,XPath也用在XSLT中。例如。 XPath查询
//delay[type = 'Deterministic']/parameters/param/@value
选择节点value
中包含的所有参数param
,这些参数是delay
的子节点,其中包含值为“确定性”的节点type
。 Here是一个很好的Web应用程序,用于测试XPath查询。 Here是一个如何在Java中使用XPath和here一般使用XPath的教程。您可以使用XPath表达式在Java代码中选择正确的节点。恕我直言,这比直接使用DOM对象模型更具可读性和可维护性(正如您已经学习的那样,这也是不时的尴尬)。
3)您可以使用Smooks执行XML transformations。如果转换变得相当复杂,这尤其有用。 Smooks从输入XML填充对象模型,并使用Freemarker或XSL模板通过模板机制输出结果XML。 Smooks具有非常高的吞吐量,可用于高性能环境,如ESB(例如JBoss ESB,Apache ServiceMix)。可能会因为你的情况而被制服。
4)您可以使用Freemarker进行转换。我没有这方面的经验,但是我听说它可以用得相当简单。请参阅文档的"Declarative XML processing" section(另请参阅"Exposing XML documents"以了解如何阅读源XML)。对我来说似乎相当简单。如果你试试这种方法,我很乐意听到它。
答案 1 :(得分:1)
这看起来像是XPATH或其他一些XML转换API的工作。
退房:http://www.ibm.com/developerworks/library/x-javaxpathapi.html
答案 2 :(得分: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
答案 3 :(得分:0)
XSLT最终是前进的方向。它实际上非常容易使用,w3schools的例子是一个很好的起点。