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

2024-06-28

我正在研究 XML 数据集(DrugBank 数据库可用)here http://www.drugbank.ca/downloads)其中某些字段包含转义的 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
}

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

为什么会发生这种情况?我所做的就是使用一个非常知名的解析器来解析它。

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • IntelliJ、Akka 和配置文件

    使用时akka http akka io 我放置akka conf in src main resources 当我run通过 sbt akka conf被正确识别 但当我运行 IntelliJ 时却没有 即使在gen idea 实现这一目
  • 围绕 glutMainLoop 执行程序的其余部分?

    我目前正在开发一个项目 其中有一个 android 应用程序 我在 PC 上的 OpenGL 窗口中编写了控件和对象 我已经让 OpenGL 窗口执行我想要的操作 并且我从 Android 设备获取了数据以流式传输到终端 但是我需要将数据传
  • 如何知道我正在使用 ndk-build 构建哪个 API 级别?

    我试图更好地理解使用 ndk build 时 api 级别的选择是如何工作的 我知道我可以明确设置APP PLATFORM in 应用程序 mk 否则 ndk build 将针对清单中指示的 apiandroid minSdkVersion
  • 尝试计算盒子的分数时小数精度损失

    我有一个场景 我有一个包含 3 个罐头的标准盒子 出于显示和查询的目的 我必须以其标准配置的十进制数量进行报告 不可能说1盒3罐 1盒2罐 等等 例如 最初我会有1盒3罐然后我移除 1 个罐子 结果是0 66 循环盒 3 罐然后我再移除 1
  • 在会话中检索并保存 gridview

    当我在文本框中写入我的名字时 我有一个用于搜索的页面 例如 它将搜索并在 GridView 中显示结果 我正在使用一个EntityDataSource with a QueryExtender所以我没有用C 编写任何代码 问题是 在 Gri
  • 使用 toYaml 进行 helm 模板化

    我有values yml 文件 它接受具有以下格式和默认值的端口列表 Ports number 443 protocol http 输出用作输入的端口列表的脚本给出了以下格式 port list get ports sh output 80
  • 在我自己的自定义 appSettings 上使用 foreach 所需的代码

    我搜索了该网站 但没有找到我想要的内容 接近 但没有雪茄 基本上我想要一个像这样的配置部分
  • 有没有文档描述 Clang 如何处理过多的浮点精度?

    当唯一允许使用的浮点指令是 387 指令时 几乎不可能 以合理的成本提供严格的 IEEE 754 语义 当人们希望让 FPU 工作在完整的 64 位有效数上时 这尤其困难 以便long double类型可用于扩展精度 通常的 解决方案 是以
  • 我可以通过 ssh 将 ssh 用户名与 git 的提交关联起来吗?

    我正在尝试通过 ssh 设置共享 git 存储库 将用户公钥复制到authorized keys 我真的希望 ssh key 中的 用户名 成为存储库中提交历史记录的一部分 这样用户 joe 就不能将他的名字设置为 kate 我们需要某种责
  • 如何清除Android应用程序中的所有活动

    我的应用程序有许多可以按任何顺序调用的活动 活动历史示例 A gt B gt C gt D gt A gt B gt E 现在在活动 E 中 我正在 注销 设备 注销用户 并删除他们可能已下载到 SD 卡的任何数据 期望的行为是应用程序 重
  • 使用 C 与 OpenMP 求和

    我已经尝试并行化这段代码大约两天了 但一直出现逻辑错误 该程序是使用非常小的 dx 之和来求积分的面积 并计算积分的每个离散值 我正在尝试使用 openmp 来实现这一点 但实际上我没有使用 openmp 的经验 我需要你的帮助 实际目标是
  • javascript - 全局变量不起作用

    我想保存一个变量 以便多个函数可以使用它 我按照 w3schools 的指示进行操作 但不起作用 我是不是忘记了什么 先感谢您 var name document getElementById name value function com
  • 将 bash 脚本转换为 python(小脚本)

    我有一个在 Linux 环境中使用的 bash 脚本 但现在我必须在 Windows 平台上使用它 并且希望将 bash 脚本转换为可以运行的 python 脚本 bash 脚本相当简单 我认为 我尝试通过 google 转换它 但无法成功
  • Python 中的 ZeroMQ 和多个订阅过滤器

    我想使用一个套接字使用 Python 中的 ZeroMQ 订阅多个过滤器 sock setsockopt zmq SUBSCRIBE first filter sock setsockopt zmq SUBSCRIBE second fil
  • 使用 Choco 建模网球比赛 (CSP)

    我正在尝试用 Choco 建模一个问题 以获得网球赛事 或任何运动 中可能的比赛组合 我尝试这样做的方式如下 Set of timeslots when the event is held i e 10am 10pm int nTimesl
  • 将 XML 文件导入 SQL Server(不使用 BULK)

    我正在尝试将数据从 XML 文件导入到数据库中 我使用了一个测试脚本BULK INSERT 但是当我在实时数据库上进行测试时 权限BULK被禁用 尝试 1 BULK INSERT XMLTable FROM C Radu test xml
  • 使用 dplyr::mutate 重新编码而不在函数中工作

    我正在尝试使用dplyr mutate across 重新编码 a 中的指定列tbl 单独使用它们效果很好 但我无法让它们在函数中工作 library dplyr library tidyr df1 lt tibble Q7 1 1 5 Q
  • elasticsearch,是否可以更新嵌套对象而不更新整个文档?

    我正在使用嵌套对象索引一组文档 将它们想象为论坛帖子 该嵌套对象是与该帖子相关的用户 我的问题是用户字段可能会更新 但由于帖子没有更改 因此它们不会重新索引 并且用户嵌套对象变得过时 有没有办法更新嵌套对象而无需再次重新索引整个文档 或者唯
  • 在android中将SQLite数据库导出到csv文件

    我正在尝试将 SQLite 数据作为目录中的 CSV 文件导出到 Android 中的 SD 卡 所以我尝试了下面的方法 显然它只显示打印出来的文本 数据库的第一个表日期 项目 金额 货币 在我的 DBHelper java 中 我定义了该
  • VTD-XML 似乎破坏了 XML 文档中的转义字符串

    我正在研究 XML 数据集 DrugBank 数据库可用 here http www drugbank ca downloads 其中某些字段包含转义的 XML 字符 例如 等 为了使问题更加具体 下面是一个示例场景