xml - 如何仅在 CDATA 中使用 xpath 保留换行符来使用 Saxon s9api 读取节点值
问题描述
具有以下 XML 结构:
<Data>
line 1
line 2 and some text
</Data>
我想使用 xpath //Data/text()获取Data节点的内容
但是使用 s9api 执行 xpath 会产生以下字符串:
line 1
line 2 and some text
保留新行和双空格的位置。如果 Data 节点在 CDATA 部分中包含它的值,那将是我想要的结果,但它没有。
在用于在 Data 节点上执行 xpath 的 Java 代码片段之后:
XPathExecutable exp = xPathCompiler.compile("text()");
XPathSelector selector = exp.load();
selector.setContextItem(item);
XdmItem evaluateSingle = selector.evaluateSingle();
result = evaluateSingle == null ? null : evaluateSingle.getStringValue();
我想让结果空白归一化:第 1 行第 2 行和一些文本
当然,我可以使用 xpath //Data/normalize-space()来获取规范化的字符串,但是希望以编程方式检测这一点:在 XML 中使用 CDATA 部分时保留空格,否则对结果进行规范化。
有没有办法知道在使用 s9api 执行 xpaths 时是否应该保留空格?或任何建议如何解决这个问题?
换句话说:当空白很重要时,我想保留它们,否则应该对空白进行规范化。
解决方案
我不知道你为什么认为 CDATA 部分应该改变空白语义。CDATA 只是一种标记文本的方式,这些文本没有使用 和 等实体引用进行<
转义>
。
当然,XML 的规则之一是它只是语法,您可以将任何语义附加到您喜欢的任何标记结构,包括 CDATA 部分。但是,如果您将含义附加到 CDATA 标记,那么 XSLT 和 XQuery 将不会帮助您,因为它们明确地忽略它。
推荐阅读
- android - 应用分发因上传 APK 时出现问题而停止:[403] 调用者没有权限
- spring - Spring WebFlux - 将文件上传到从不同 URI 下载的 URI
- linux - 父进程已经死亡的进程是否正常继续执行?
- android - 如何在 Android 12 上更改通知的背景颜色
- pyspark - 使用时间戳 pyspark 更新 json 列
- scala - 如何返回成功解析并转换为我的案例类的行
- html - VBA Selenium - 从 aria-label 中提取信息
- php - Μysql - 在 php 中获取后如何从数组中获取第一个值
- postgresql - 如何从 PostgreSQL 查询正确构建 KnexJS 查询
- sql - 如果在 SQlite 中删除触发器后结果为空,如何将值更新为 0?