xPath 的 text() 不返回自定义实体



我有以下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()不返回自定义实体,还有其他方法吗?有没有办法只匹配包含&abc;的条目?

顺从行为

不能针对&abc;内部常规实体引用进行测试,因为当内部常规实体引用出现在 XML 文档的内容中时,XML 解析器必须将内部常规实体引用替换为其替换文本 (a b c(。

您可以通过将 XPath 从

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

它不选择任何内容

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

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

替换文本应可用作文本节点,因此

//entry/text()

选择三个文本节点:

a b c
x y z
text

Xmllint 的行为

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

最新更新