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
标志。
我有以下 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
标志。