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

我正在研究一个XML数据集( 此处提供的DrugBank数据库),其中一些字段包含转义的XML字符,如“&”等。

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

  DB00001  # Askari AT, Lincoff AM: Antithrombotic Drug Therapy in Cardiovascular Disease. 2009 Oct; pp. 440–. ISBN 9781603272346. "Google books":http://books.google.com/books?id=iadLoXoQkWEC&pg=PA440.  .   ...  ...  

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

 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的错误Errors in Entity: Illegal entity char 。 在将输入打印到finerParse (即drugXML字符串)时,我注意到原始xml中的字符串&pg=PA440已更改为“&pg = PA440”。

为什么会这样? 我正在做的就是使用一个非常着名的解析器来解析它。

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

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