English 中文(简体)
Java中的XML解析/ DOM操作
原标题:XML Parsing / Dom Manipulation in Java

我正在尝试找出最好的翻译方法:

<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>

我先尝试使用文件BuilderFactory,但我虽然能够获取名称标签的价值,但我无法从拖延/批量部分获得价值。 所用代码一

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进行编组和解组。

任何帮助都会受到高度赞赏。

最佳回答

有多种方式可以将XML进行转换。

你可以使用XSLT(XSL转换)来转换XML。它是一种基于XML的语言,用于将XML文档转换为其他XML文档,文本或HTML。语法很难学习。但是它是XML转换的强大工具。 这里是一个教程。对于使用Java的XSLT,我建议使用Saxon,它还附带有很好的文档。使用XSLT的一个重大优势是转换可以外部化为单独的模板。因此,您的Java代码不会被翻译问题所混淆。但是,正如提到的那样,学习曲线肯定更陡。

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

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

选择所有位于包含值为“确定性”的节点typeparam子节点的延迟中的 value 参数。 这里是一个非常棒的Web应用程序,用于测试XPath查询。 这里是一个教程,介绍如何在Java中使用XPath,这里 介绍XPath的一般知识。您可以在Java代码中使用XPath表达式来选择正确的节点。在我看来,这比直接使用DOM对象模型(这也是你已经学过的)要更可读和可维护。

3)您可以使用Smooks进行XML转换。这对于转换比较复杂的情况尤其有用。Smooks通过使用Freemarker或XSL模板的模板机制从输入XML填充对象模型,并输出结果XML。Smooks具有非常高的吞吐量,用于高性能环境,如ESB(例如JBoss ESB,Apache ServiceMix)。但对于您的情况可能过于强大。

4) 您可使用 :Freemarker 进行转换。 我没有这方面的经验,但正如我听到的那样,可以非常简单地加以利用。 见“Declarative XMLprocess”部分(也参看> Exating XML文件,以学习如何读出源XML。 令我很简单。 如果你尝试这一方法,我很想听一下。

问题回答

这似乎是XPATH或其他XML转换API的工作。

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

尽管XSLT可能是最好的方法,但如果您想使用JVM编程语言并学习不同的方法,您可以尝试使用scala的XML转换库。

一些博客员额:

将此翻译成中文:http://scala.sygneca.com/code/xml-pattern-matching http://scala.sygneca.com/code/xml-pattern-matching

将此翻译成中文:http://debasishg.blogspot.com/2006/08/xml-integration-in-java-and-scala.html http://debasishg.blogspot.com/2006/08/xml-integration-in-java-and-scala.html

XSLT是最终前进的道路。 它实际上很容易使用,3所学校就是一个良好的开端。





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签