gpt4 book ai didi

java - VTD-XML 似乎破坏了 XML 文档中的转义字符串

转载 作者:行者123 更新时间:2023-11-30 11:10:08 26 4
gpt4 key购买 nike

我正在处理一个 XML 数据集(DrugBank 数据库可用 here),其中一些字段包含转义的 XML 字符,如“&”等。

为了使问题更具体,这里有一个示例场景:

<drugs>
<drug>
<drugbank-id>DB00001</drugbank-id>
<general-references>
# Askari AT, Lincoff AM: Antithrombotic Drug Therapy in Cardiovascular Disease. 2009 Oct; pp. 440&#x2013;. ISBN 9781603272346. "Google books":http://books.google.com/books?id=iadLoXoQkWEC&amp;pg=PA440.
</general-references>
.
</drug>
<drug>
...
</drug>
...
</drugs>

由于整个文档很大,我解析如下:

VTDGen gen = new VTDGen();
try {
gen.setDoc(Files.readAllBytes(DRUGBANK_XML));
gen.parse(true);
} catch (IOException | ParseException e) {
SystemHelper.exitWithMessage(e, "Unable to process Drugbank XML data. Aborting.");
}
VTDNav nav = gen.getNav();
AutoPilot pilot = new AutoPilot(nav);
pilot.selectXPath("//drugs/drug");
while (pilot.evalXPath() != -1) {
long fragment = nav.getContentFragment();
String drugXML = nav.toString((int) fragment, (int) (fragment >> 32));
System.out.println(drugXML);
finerParse(drugXML); // another method handling a more detailed data analysis
}

当我使用示例 xml(从相同数据复制粘贴的片段)测试 finerParse 方法时,它运行良好。但是当从上面的代码调用时,它失败并显示错误消息 Errors in Entity: Illegal entity char。将输入打印到 finerParse(即 drugXML 字符串)后,我注意到原始 xml 中的字符串 &pg=PA440 是更改为“&pg=PA440”。

为什么会这样?我所做的只是使用非常知名的解析器对其进行解析。

附言我已经找到了一个替代解决方案,我只是将 VTDNav 作为参数传递给 finerParse,而不是首先获取内容字符串并传递该字符串。但是我仍然很好奇上述方法出了什么问题。

最佳答案

而不是 vtdNav.toString() 使用 vtdNav.toRawString() 问题应该消失...让我知道它是否有效。

关于java - VTD-XML 似乎破坏了 XML 文档中的转义字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com