【问题标题】:How to translate this simple C# method that use XPath into a Java method?如何将这个使用 XPath 的简单 C# 方法转换为 Java 方法?
【发布时间】:2013-12-17 10:47:22
【问题描述】:

我对 JavaXPath 的使用非常陌生,但我不懂 C#

这次我不得不将一些使用XPathC#方法转换成Java方法,对此我有些疑惑。 p>

在 C# 方法中,我找到了以下代码行:

System.Xml.XmlNode element;
System.Xml.XmlNode filter;

filter = _document.CreateElement("filter");
element = _document.CreateElement("name");
element.InnerText = es.Descrizione;
filter.AppendChild(element);

我正在尝试将其转换为 Java 代码。

我认为前2行可以翻译为:

Element element;
Element filter;

(很简单的一个Jdom Element对象的声明)

但我对如何用 Java 翻译这些行有很多疑问:

filter = _document.CreateElement("filter");
element = _document.CreateElement("name");

filter.AppendChild(element);

你能帮帮我吗?

Tnx

安德烈亚

【问题讨论】:

  • 首先,您的 C# 代码不使用 XPath。它只使用 DOM 方法。其次,在 Java 中,您可以选择树模型:DOM、JDOM、XOM、DOM4J。您已经暗示要使用 JDOM(这可能是一个不错的选择),但您会得到令人困惑的答案,因为您还没有真正明确这一点。

标签: c# java xml xpath xml-parsing


【解决方案1】:

为什么要提到 XPath?我看不出它有什么用处。如果您想继续使用 DOM API,那么即使在 Java 中使用 http://docs.oracle.com/javase/7/docs/api/org/w3c/dom/package-summary.html 也可以这样做,您的代码将是

import org.w3c.dom;


Element element;
Element filter;

filter = _document.createElement("filter");
element = _document.createElement("name");
element.setTextContent(es.Descrizione);
filter.appendChild(element);

如果您想使用 JDOM,那么您需要更改方法,而不是使用像 document.createElement(..) 这样的基于 DOM 的工厂方法,您只需使用像 new Element(..) 这样的构造方法。

【讨论】:

  • mmm 我正在导入 org.jdom.* 包而不是 org.w3c.dom,我不知道这是同一回事。顺便说一句,我正在尝试执行您建议但无法工作的操作,我已经这样做了: Document document = new Document(); filter = document.createElement("filter");但是现在 Eclipse 对我说以下错误消息:“方法 createElement(String) 未定义类型 Document”为什么?
  • @AndreaNobili,W3C DOM 和 JDOM 是不同的对象模型,您需要决定要使用哪一个。您似乎在 Java 中使用 JDOM,但是当您尝试使用 .NET 中的 DOM 转换 C# 代码时,在 Java 中使用 DOM 也可能更容易。这是你的选择。如果您选择 JDOM,那么您当然必须使用 JDOM API。文档上的所有createXXX 方法都是W3C DOM 的一部分,JDOM 有意使用不同的方法并提供像new Element(..) 这样的构造方法来构造元素节点。所以决定你要使用哪个对象模型和哪个 API。
【解决方案2】:

Java 等价物如下:

import javax.xml.parsers.*;
import org.w3c.dom.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        Element element;                            // System.Xml.XmlNode element;
        Element filter;                             // System.Xml.XmlNode filter;

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();

        Document _document = db.newDocument();
        filter = _document.createElement("filter"); // filter = _document.CreateElement("filter");
        element = _document.createElement("name");  // element = _document.CreateElement("name");
        element.setTextContent(es.Descrizione);     // element.InnerText = es.Descrizione;
        filter.appendChild(element);                // filter.AppendChild(element);
        _document.appendChild(filter);
    }

}

【讨论】:

    猜你喜欢
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多