问题标签 [xom]
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.
java - 在 XML 文档中查找元素的确切位置
我正在寻找一种方法来找到元素在 XML 文档中的确切位置。我用 XOM 解析我的 Document 并以通常的方式处理它。棘手的是,在 XML 文档中,嵌入了一些脚本(只是文本节点),如果脚本失败(解析、逻辑等),我想向用户(编写这些脚本)报告确切的行号脚本已被声明。
最理想的方式是这样的:
遗憾的是,无论有没有 XOM,我都找不到这样做的方法。如果有人有想法或已经做过类似的事情 - 我可以使用一些帮助。:-)
java - 解析 XML 时忽略 DTD
使用 XOM xml 库解析文件时如何忽略 DTD 声明。我的文件有以下行:
当我尝试 build() 我的文档时,我得到 DTD 文件的 filenotfound 异常。我知道我没有这个文件,我也不关心它,那么在使用 XOM 时如何删除它呢?
这是一个代码片段:
我在这一行得到一个 NullPointerException:
从源 XML 文件中删除 DTD 行后,我可以成功解析它,但这不是最终生产系统中的选项。
jtidy - 使用 NekoHTML(或 JTidy)+ XOM 转义评论
我正在使用 NekoHTML 清理一些 HTML,然后将其提供给 XOM 以获取对象模型。在此过程中的某个地方,评论正在逃脱。
这是输入 HTML 的相关示例(为了清晰起见,大部分内容都被<head>
删减了):
这是代码:
这是相应的输出:
当我从 XOM 文档中提取 script 元素时,它看起来已经被破坏了(SCRIPT 元素有一个Text
子节点,而不是我期望的序列Texts
)Comments
,所以我不认为这是Serializer
出错了.
现在,我不希望保留换行符,事实上我无论如何都会扔掉脚本标签,但是还有其他地方我希望保留评论或至少希望能够获取没有嵌入其中的转义注释的文本。
有任何想法吗?
更新: NekoHTML 正在修改一些标签,所以我切换到 JTidy,我也遇到了同样的问题。有趣的是,这只是标题中的脚本标签的问题。其他评论通过罚款。还有一些奇怪的额外 JavaScript 注释,我怀疑(希望和祈祷)是 JTidy 的错。
看起来 JTidy 所做的是将<script>
内容转换为 CDATA;当我将 JTidy 的原始输出发送到标准输出时,我得到了这个:
java - XOM.nu 设置关闭标签格式
如何设置 uп Xom.nu 以使元素像这样关闭:
<Node></Nodes>
而不是<Node/>
。
我想这样做的原因是这个 XML 将被导入到一个工具中,不幸的是它承认了以前的“关闭标签约定”。
java - 让 Element.toXML() 正确缩进而不是将结果字符串显示为单行?
的默认行为Element.toXML()
似乎将结果显示为单行。是否可以让它以分层方式以多行显示结果?
例子:
这就是我想要得到的
这就是我现在得到的:
谢谢
java - XOM 中的查询节点
我在 XOM 中查询文档,获取一个节点,然后在该节点中查询另一个节点。但是,查询节点的行为就像查询整个文档,而不仅仅是这个节点。
XML 是这样的:
我正在这样做:
并innerNodes
包含 0 个孩子。当我更改"/Value1"
为"//Value1"
(添加斜线)时,我得到了不同的值 1,所以它看起来像是在查询整个文档,而不是我选择的节点。
如何查询 XOM 中的特定节点?
java - Java 如何提取完整的 XML 块
使用此 XML 示例:
我想要一个简单的方法来提取节点 B 的 XML 块,返回 XML 字符串:
要检索这个节点,我应该使用一些 Java XPath 库,如 XOM 或 Java XPath,但我找不到如何获取完整的 XML 字符串。
我使用 C# 找到了两个等效的已回答问题: C# 如何提取完整的 xml 节点集以及如何从 XML 文档中提取 XML 块?
xpath - Using XPath to extract XOM elements from documents with unnecessary namespaces
I'm trying to parse some HTML returned by an external system with XOM. The HTML looks like this:
(Actually it's significantly messier, but it has this DOCTYPE declaration and these namespace and language declarations, and the HTML above exhibits the same problem as the real HTML.)
What I want to do is extract the content of the <div>
, but the namespace declaration seems to be confusing XPath. If I strip out the namespace declaration (by hand, from the file), the following code finds the <div>
, no problem:
But with the namespace, the returned Nodes
has a size of 0.
All right, how about if I strip the namespace programmatically?
...looks like it should work, but does nothing. From the javadoc:
This method only removes additional namespaces added with
addNamespaceDeclaration.
Okay, I thought, I'll provide the namespace to the query:
Size still zero.
How about constructing the namespace context by hand?
The XPathContext
constructor blows up with:
So, I'm looking for either:
- a way to make this query work, or
- a way to programmatically strip the namespace declarations, or
- an explanation of the correct approach, assuming both of these are wrong.
Update: Based on Lev Levitsky's answer and the Jaxen FAQ I came up with the following hack:
This still seems a bit demented to me, but I guess it's the way Jaxen wants you to do things.
Update #2: As noted below and all over the Internet, this isn't Jaxen's fault; it's just XPath being XPath.
So, while this hack works, I would still like a way to strip the namespace declaration. Preferably without going as far as XSLT.
java - 使用 XOM 插入额外的父 XML 元素
使用以下 XML:
使用 XPath 我查询子元素,并根据某些条件,我想在其中一些元素之上附加一个额外的父级别:
最好的方法是什么?
我在考虑以下几点:
但我想保留订单。可能这可以使用parent.insertChild(child, position)
?
编辑:我认为以下方法可行,但我很好奇是否有人有更好的方法:
编辑2:这可能更好,因为它允许您将其他元素与您不感兴趣的子元素混合: