xpath 的 text() 不 return 自定义实体

xpath's text() does not return custom entities

我有以下 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
  <!ELEMENT root (entry*)>
  <!ELEMENT entry (#PCDATA)>
  <!ENTITY abc "a b c">
  <!ENTITY xyz "x y z">
]>
<root>
  <entry>&abc;</entry>
  <entry>&xyz;</entry>
  <entry>text</entry>
</root>

我使用下面的命令来测试我的 XPaths:

xmllint --xpath '...' test.xml

我正在尝试将一些自定义实体与 XPath 匹配,如下所示:

//entry[text() = '&abc;']

但它不匹配任何内容。所以我什至尝试过:

//entry/text()

最后一个条目的唯一结果是 text,前两个条目没有结果。如果 text() 没有 return 自定义实体,还有什么可以做的吗?有没有办法只匹配包含 &abc;?

的条目

合规行为

您无法针对 &abc; 内部通用实体引用进行测试,因为 XML 解析器 must substitute 内部通用实体引用及其替换文本 (a b c) 在内部时一般实体引用出现在 XML 文档的内容中。

您可以通过将 XPath 从

//entry[text() = '&abc;']

什么都不选

//entry[text() = 'a b c']

选择包含替换文本的 entry 元素。

替换文本应作为文本节点提供,因此

//entry/text()

选择三个文本节点:

a b c
x y z
text

xmllint 的行为

要从 xmllint 获得此预期行为,请使用(奇怪的名称)--noent 标志。