- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Java 的新手,在评估了一些 Java 库之后,我通过其性能测试和使用 Xpath 的选项选择了 VTD-XML,我尝试了 StaX,我认为它不适合人类,真的很难理解如何解析有效(几乎对我 XD)。
因此,我的目标是将来自 partial_geo_codes.xml 的 geo_code 节点“注入(inject)”到 geo_code accommodations.xml 中,匹配来自两者的节点 ext_id 上的值
住宿.xml
<accommodations>
<accommodation>
<ext_id>12345</ext_id>
<type>A</type>
<details>D</details>
<geo_code />
</accommodation>
这是要附加到 accommodation.xml 中的文件:
partial_geo_codes.xml
<geo_codes>
<geo_code>
<ext_id>12345</ext_id>
<geo_idlocacion>77500</geo_idlocacion>
<latitude>42.578114</latitude>
<longitude>1.648293</longitude>
</geo_code>
<geo_code>
...
<geo_code>
<geo_code>
...
<geo_code>
<geo_codes>
这是预期的输出:
accommodation_new.xml
<accommodations>
<accommodation>
<ext_id>12345</ext_id>
<type>A</type>
<details>D</details>
<geo_code>
<ext_id>12345</ext_id>
<geo_idlocacion>77500</geo_idlocacion>
<latitude>42.578114</latitude>
<longitude>1.648293</longitude>
<geo_code>
</accommodation>
<accommodation>
.....
</accommodation>
......
</accommodations>
这是我的“想要成为真正糟糕的”Java 类:
import com.ximpleware.extended.*;
import java.io.*;
public class MergeVtd {
public static void main(String args[]) throws Exception {
String filesPath = new java.io.File("").getAbsolutePath() .concat("/main/src/");
long start = System.currentTimeMillis();
//init original xml
VTDGenHuge vgh = new VTDGenHuge();
//init tobemerged xml
VTDGenHuge vgm = new VTDGenHuge();
if (vgm.parseFile(filesPath.concat("partial_geo_code.xml"),true,VTDGenHuge.MEM_MAPPED)){
VTDNavHuge vnm = vgm.getNav();
AutoPilotHuge apm = new AutoPilotHuge(vnm);
apm.selectElement("ext_id");
int count=0;
while (apm.iterate()){
int t = vnm.getText();
if (t!=-1) {
System.out.println("Value vnm ==> "+vnm.toNormalizedString(t));
//we have id to match....
if (vgh.parseFile(filesPath.concat("accommodation.xml"),true,VTDGenHuge.MEM_MAPPED)){
VTDNavHuge vnh = vgh.getNav();
AutoPilotHuge aph = new AutoPilotHuge(vnh);
aph.selectXPath("/accommodations/accommodation/ext_id[text()='" + vnm.toNormalizedString(t) + "']" );
int result = -1;
while ((result=aph.evalXPath())!=-1){
int g = vnh.getText();
if (g!=-1) {
System.out.println("Value vnh ==> "+vnh.toNormalizedString(g));
} else {
System.out.println("no match in vnh !======= ");
}
}
}
}
System.out.println("============================== " + count);
count++;
}
}
long end = System.currentTimeMillis();
System.out.println("Execution time was "+ (end - start) +" ms.");
System.exit(0);
}
}
我真的很感激任何线索帮助我如何一次迭代到 2 个 xml 文件并更快地通过 ext_id 节点值合并,现在真的需要太多时间。
最佳答案
partial_geo_codes.xml 有多大?能装进内存吗?如果是,那么我建议使用 HashMap 对其进行索引。只需创建简单的 HashMap,并将对以 ext_id 值为键的 geo_code 节点的引用放在那里。
完成后,您只需传递一次 accomodations.xml。现在你的算法复杂度是 O(n^2),更糟糕的是涉及 n 次磁盘读取!带有 HashMap 的版本将花费 O(n) 时间,并且只需要一次通过两个 xml 文件。
关于java - 如何通过 VTD-XML 中的节点名称-值合并(加入)两个不同的 xml 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12356637/
因为如果线程安全,我可以在整个应用程序中仅使用VTDGen的一个实例。 现在,我为每个请求实例化一个新的VTDGen,我正在考虑将其设置为static,以便仅对其进行一次初始化。 最佳答案 线程安全到
问题是有些 xml 文件在 xml 中没有可用的 header 信息。解析 xml 文件时,vtd-xml 默认使用 utf-8 并抛出异常,提示无法解析文档。 (xml 编码是 8859-2,但没有
使用Java 2.11版本。我正在基于 CD Catalog 数据绑定(bind)示例构建 xml 绑定(bind)组件。我有一个相当复杂但相当小的文档,大约 2000 字节。而且 AutoPilot
我有巨大的 xml,因此我有很多 xpath 来从 xml 中提取条目。所以我尝试生成多个线程,以便每个 xpath 可以在不同的线程中进行评估。但是我收到以下错误是可以给出一个公平想法的代码片段,为
我用java实现了VTD-Parser,它成功地轻松解析了大约500 MB的XML文件,并且能够在Excel中写入。我理解DOM解析器首先创建树节点结构然后获取数据,而SAX是基于事件的解析器。但是是
我在使用 vtd-xml 库(版本 2.11)时遇到编码问题。 @Test public void test() throws Exception { final String
在VTDNav docs我看到了获取 attrubites 的值、获取元素的文本值的方法,但我真的找不到,如何获取当前元素的标签名称? 最佳答案 vn.toRawString(vn.getCurren
我正在尝试解析以下 XML 并创建与主要元素相对应的 Java 对象: wood 12 ... someone 200
我决定使用 VTD-Xml 来解析一个非常大的文件。它工作得很好,但在解析过程中,可以进行验证检查,必须使用已验证字段(行和列)的位置进行记录。我找不到任何方法来使用 VTD 至少获取元素的行号。而且
我正在处理平均 18 MB 的 XML,其中 XPaths 大量使用谓词。我尝试分析处理过程(预热 JVM),平均处理时间为 20 秒。我想知道是否有使它更快的技术?比如避免使用谓词? 最佳答案 如果
嘿,我正在尝试使用 VTD-XML 来解析作为字符串提供给它的 XML,但我找不到如何去做。任何帮助将不胜感激。 http://vtd-xml.sourceforge.net 最佳答案 VTD-XML
我在尝试通过 getElementFragmentNs 提取元素时遇到问题。 这里是示例测试: @Test public void shouldNotShadowNamespaceAn
我正在尝试使用 VTD-XML 从父元素中删除一组子元素。 不幸的是,删除元素后,它会留下被删除元素先前占用的新行。 VTD-XML 作者 here 撰写的有关 VTD-XML 的文章的读者也观察到了
我有以下 XML 片段,我想使用 Ximpleware/VTD-XML 从中剥离属性并输出为新的 XML。来源: 目标: 我知道我可以使用 removeAttrib
我有一个 xpath 查询,我可以获得所有属性及其各自的值 但现在我想知道这些属性属于哪个元素? 这是我的 xml:
这个问题已经有答案了: Compile Error: Cannot Find Symbol (2 个回答) 已关闭 7 年前。 我不是 Java 程序员,但需要编写 Java 程序来解析大型(400m
使用 VTD-XML 解析器我该怎么做? 1 2 3 1 2
我有一个 XML block ,如下所示,其中包含 3 个 AttachmentBinary 元素(尽管为了可读性而被截断): 219 /9j/4UK8RXhpZgAAS
给定属性的 xpath 和新值,我希望将属性值更新为新值。 我按照这里的例子:http://vtd-xml.sourceforge.net/codeSample/cs7.html并提出以下内容: au
我有一个像这样的 XML: 1 2 3 4 是否可以使用 Java 和 VT
我是一名优秀的程序员,十分优秀!