问题标签 [dom4j]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
977 浏览

java - 在 dom4j 中指定 XML 路径

我想使用 dom4j 解析一个大的 xml 文件。我正在使用 dom4j 的功能,您可以为路径表达式注册事件处理程序,以忽略我不关心的元素。该功能在此处进行了说明:http: //dom4j.sourceforge.net/dom4j-1.6.1/faq.html#large-doc

我从那里引用:“然后,将在针对特定处理程序注册的每个路径的开始和结束处调用这些处理程序。当找到路径的开始标记时,将调用注册到该路径的处理程序的 onStart 方法。当如果找到路径的结束标记,则调用注册到该路径的处理程序的 onEnd 方法。

onStart 和 onEnd 方法传递一个 ElementPath 的实例,该实例可用于检索给定路径的当前元素。如果处理程序希望“修剪”正在构建的树以节省内存使用,它可以简单地调用处理程序 onEnd() 方法中正在处理的当前元素的 detach() 方法。

我的问题是我不知道应该给出什么路径,以便根节点的所有子节点都由这两种方法处理。

我的 xml 文件类似于:

如果我想处理厨师元素,那么路径将是 /root/chef。对于配方元素,路径为 /root/recipe。

但是应该给 dom4j 的路径是什么,以便它可以处理(在 onStart()、onEnd() 中)厨师和食谱元素?

非常感谢!

0 投票
1 回答
861 浏览

java - Android 1.5 和 dom4j - 属性名称解析不正确

我正在为 Android 1.5 开发应用程序。目前,我需要解析 XML 文件。由于 Android 在 API 级别 3 中本机不支持 XPath,我决定使用 dom4j 和 jaxen 库来读取文件。

我有简单的 XML 文件(test1.xml):

和简单的代码:

它读取 test1.xml 文件,找到“/tests/test”节点并枚举它的属性。当我将此代码作为“桌面”Java 应用程序的一部分运行时(我不熟悉 Java 术语),它显示了我所期望的(Fedora Linux 下的 OpenJDK 1.8.3):

不幸的是,在 Android 1.5(模拟器 ofc)中,完全相同的代码显示:

如您所见,属性的值是可以的,但是名称有问题。我完全不知道,为什么在这个地方会出现完全来自其他 DOM 元素(“/tests/resources”)的属性名称。它似乎错误地解析了我的文件,所以我可能设置了错误...

当然,这两个版本都使用完全相同的 .jar 和 dom4j 和 jaxen 库,所以这可能没问题。

这个问题的影响不仅仅是不正确的属性列表。它还不允许我使用 XPath 正确读取属性 - 选择 "/tests/test/@name" 没有给出任何结果,而 "/tests/test/@base_lang" 给出了“主名称”字符串。这显然是由与上面列出属性相同的错误引起的。

有没有人遇到过这个?我该如何解决?

不幸的是,迁移到具有本机 XPath 支持的更新的 Android 对我来说不是一个选择。

我试图在网上和这里找到任何东西,但没有运气。

0 投票
2 回答
4083 浏览

xsd - 在 java 1.6 中使用 dom4j DOMDocument 来提供 validator.validate(DOMSource) 失败(不允许使用 xsi:noNamespaceSchemaLocation),在 1.5 中有效

在 java 1.6 中使用 dom4j DOMDocument 来提供 validator.validate(DOMSource) 失败(xsi:noNamespaceSchemaLocation 不允许出现在根元素中),在 1.5 中有效

我发现以下问题非常棘手(好吧,这是轻描淡写的) - 任何见解都会受到赞赏。目前似乎最好的想法是放弃 dom4j 以支持例如 XOM (http://stackoverflow.com/questions/831865/what-java-xml-library-do-you-recommend-to-replace-dom4j)。

我一直在验证从 dom4j 'new DOMDocument()' 创建的内存 XML - 但这不适用于 Java 6。

以下对 dom4j (1.6.1) DOMDocument 派生的 DOMSource 的 validate(source) 调用适用于 Java 1.5.x,但在 Java 1.6.x 中失败:

getSchemaURLString() 还用于将 xsi:noNamespaceSchemaLocation 属性添加到根节点,即:xsi:noNamespaceSchemaLocation="http://localhost:8080/integration/xsd/fqlResponseSchema-2.0.xsd"

异常如下:

这是 XML 的开头 - 在禁用对 validator.validate(source) 的调用后生成:

XSD:

所以我的根元素被拒绝了,因为它包含一个 xsi:noNamespaceSchemaLocation 属性。并且架构本身并没有将其指定为我的根元素的有效属性?

在这一点上,在我看来,我需要为这项任务放弃 dom4j 并切换到其他解决方案之一,例如此处概述的:

但无论如何我想知道我做错了什么!

提前致谢。

0 投票
1 回答
4771 浏览

java - 更改 DOM4J 文档的编码:UTF 到 ISO-8859-1 (Java)

我需要创建一个,org.dom4j.Document但是当我打印它时,它总是UTF-8.

我想改变它,ISO-8859-1但我没有找到方法。无法使用.setEncoding(),并且 Document 是动态创建的(不是从 读取InputStream)。

这与http://www.coderanch.com/t/127978/XML/change-Encoding-Dom讨论的问题相同

非常感谢!

0 投票
1 回答
330 浏览

hibernate - Hibernate:如何在运行时使用“embed-xml=false”加载嵌入 xml

如果 embed-xml=true,则将加载嵌入的 xml 数据。是否仍然可以通过将 embed-xml 动态修改为 true 来加载嵌入数据?我想在映射文件中将映射定义为 false。然后由于通常不需要嵌入数据,因此大多数时候没有多少数据库调用。对于某些场景,按需加载嵌入数据。可以通过为同一实体创建两个映射定义来完成。有更好的方法吗?

0 投票
1 回答
276 浏览

java - 以下java方法有什么问题?

我正在尝试在这里翻译 Javascript 函数。

这将产生一个给定 org.w3c.dom.DOMElement 的基本 xpath 字符串:/html/body/p[3]/a

getElementXpath如果我注释掉getElementIdx()函数和条件,效果很好。问题似乎位于getElementIdx(),但我看不出我做错了什么,下面的 Java 代码与 Javascript 版本几乎相同。

会发生什么是返回一个空字符串!我尝试打印出getElementXpath函数内部的路径,但没有任何效果。预期的输出是一个基本的 xpath 字符串!

更新:

为什么不在 for 循环之外打印路径???

0 投票
2 回答
4640 浏览

xml - DOM4J:检索按属性值过滤的节点的值

我有一个给定的xml结构如下:

使用 SAXReader (DOM4J),如何获取包含在 id = 1 的节点中的值(示例中为“aaa”)?

我试过这个:

其中 elem 是正确的“path.current”,但它不起作用。

可能我正在用错误的语法编写条件..建议?

0 投票
1 回答
325 浏览

java - 如何将 org.dom4j.io.SAXReader 解析的 xml 文档转换为可视化的 Swing 树?

我已经使用org.dom4j.io.SAXReader解析了一个 xml 文档,是否可以将其输入javax.swing.tree.TreeModel并生成一个动态变化的可视 Swing JTree

例如,当我以编程方式添加或删除节点时,我希望 Swing JTree立即反映更改。

我怎样才能做到这一点,使用 dom4j 是否有更好的建议?

0 投票
1 回答
732 浏览

java - 如何将 dom4j xml 转换为 Swing Jtree?

我正在使用 dom4j 来解析 xml。然后我希望能够将此 xml 表示为 Jtree。每当我通过 dom4j 以编程方式添加或删除节点时,我希望更改立即反映在 Jtree 中。当我单击 Jtree 节点时,如何捕获事件?

我在http://dom4j.sourceforge.net/apidocs/发现了 dom4j.swing 包

但是,我不知道我将如何使用它。我应该使用哪个,我不确定。我似乎找不到这方面的任何示例或教程。

分支树节点、文档树模型、叶树节点。

0 投票
1 回答
1312 浏览

java - 通过 org.w3c.dom.Element 对象作为 org.dom4j.Document 上的参数查找(将 org.w3c.dom.Element 转换为 org.dom4j.Element)

我有一个org.w3c.dom.Documentorg.dom4j.io.DOMReader.

我想通过搜索 dom4j DOM 文档org.w3c.dom.Element

比如说,我有一个 org.w3c.dom.Element,我需要在 dom4j 文档中找到它。org.w3c.dom.Element除了将对象作为参数之外,我没有任何元素信息。

我想要类似 dom4j 的东西doc.findByDomElement(org.w3c.dom.Element element),它会返回一个org.dom4j.Element.