【问题标题】:Is there a Java equivalent for XmlDocument.LoadXml() from .NET?.NET 中的 XmlDocument.LoadXml() 是否有 Java 等效项?
【发布时间】:2012-10-22 01:30:18
【问题描述】:

.NET C# 中,当尝试将string 加载到xml 中时,您需要使用System.Xml 中的XmlDocument 类型并执行以下操作:

例如:

string xmlStr = "<name>Oscar</name>";
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlStr);
Console.Write(doc.OuterXml);

这看起来很简单,但我如何在Java 中做到这一点?是否可以像上面那样直接、简短、简单地将string 加载到xml 中,并避免为此实施其他方法?

提前致谢。

【问题讨论】:

  • 我认为“避免使用库”的约束有点似是而非; Java中的“库”(例如System.Xml)可能“默认”不存在,这不是一个有用的标准。 Java有一个bounty of XML parsing libraries——选一个;通过一些努力,所有这些都可以浮出水面(无论是在那里还是通过最少量的 API 包装),以允许像您这样的代码示例工作。
  • 是的,我的错误,我更新了我的问题。
  • 但我的意思是,您选择的 whatever XML API,实现这样的 API 以使您的示例代码能够像那样工作是非常微不足道的。为什么不直接选择一个 API 并创建一个 4 或 5 行包装方法,为您提供所需的接口?
  • 好吧,我只是想要一些简单而简短的东西,编写的代码越少越好,所以它将“复制”.NET 方式。

标签: c# java .net xml xmldocument


【解决方案1】:

试试这个:

DocumentBuilderFactory documentBuildFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder doccumentBuilder = documentBuildFactory.newDocumentBuilder();
Document document = 
 doccumentBuilder.parse(new ByteArrayInputStream("<name>Oscar</name>".getBytes()));

您可以通过以下方式遍历Oscar

String nodeText = document.getChildNodes().item(0).getTextContent() ;         
System.out.println(nodeText);

转换回来:

TransformerFactory tFactory =  TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource domSource = new DOMSource(document);
//to print the string in sysout, System.out
StreamResult streamResult = new StreamResult(System.out);
transformer.transform(domSource, streamResult ); 

以字符串形式获取结果:

DOMSource source = new DOMSource(document);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
StreamResult result = new StreamResult(outStream);
transformer.transform(source, result);
String resultString = new String( outStream.toByteArray());
System.out.println(resultString);

【讨论】:

  • 很好 :-) 我有一个问题,如何将Document document 转换为string
  • @OscarJara 更新了答案。请检查。
【解决方案2】:

您可以选择 Java 中的树模型 - DOM、XOM、JDOM、DOM4J。许多人(包括上面的 Singh)默认使用 DOM,因为它包含在 JDK 中,但它可能是最糟糕的,主要是因为它是最古老的(它是在命名空间出现之前发明的),并且因为它也试图这样做很多(HTML、事件处理等,以及 XML)。我建议使用 JDOM2。如果您查看 Javadoc 以找到从输入流构建 JDOM2 文档的方法,应该不难。

【讨论】:

    【解决方案3】:

    Java 有大量用于处理 XML 的库。除了标准 Java 安装中包含的许多使用 XML 的类之外,还有许多其他可用的开源库。这里有几个选项。查看文档,看看哪一个满足您的需求:

    XStream Library 非常快速且易于使用。我已经将它用于 XML 序列化,我对此非常满意。如果您不想使用外部库,请尝试 演示的javax.xml.parsers.DocumentBuilderhere

    【讨论】:

      【解决方案4】:

      如果您想在 Java 中将字符串 str 解析为 Document,您可以执行以下操作:

              DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
              DocumentBuilder docBuilder = dbf.newDocumentBuilder();
              InputStream is = new ByteArrayInputStream(str.getBytes("UTF-8"));
              return docBuilder.parse(is);
      

      【讨论】:

      • 感谢您的回答,这行得通,但我有一个问题,如何将docBuilder.parse(is) 设置为string 并打印xml
      • 如果你想打印 XML,可能你只想做 System.out.println(str);创建 Document,对 XML 文档执行文档操作
      • 好吧,这不是重点,让我简单解释一下我的问题本身:在 .NET 中,我得到了一个从我无权访问的静态 xml 资源文件加载的 xml 字符串。然后根据用户选择替换此模板中的一些字符串,但如果用户选择一个特定选项,则必须删除一些节点。因此,当这种情况发生时,模板(xml 字符串)会变成空行,但这不是问题,因为在将其加载到 XmlDocument 时,一切都会很好地形成。问题是这个逻辑也将用于 Java 并且不会像 .NET 那样发生
      猜你喜欢
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多