提问人:user21397135 提问时间:3/14/2023 最后编辑:LMCuser21397135 更新时间:3/14/2023 访问量:34
使用实体时,实体定义中的转义 XML 变为未转义
Escaped XML in entity definition becomes un-escaped when entity is used
问:
我有一个 XML 文件,其中包含许多存储为实体的 SQL 查询。在文档的下方,属性引用这些实体,以便将文档结构中的元素绑定到数据库中的匹配元素的 SQL 查询相关联。
其目的是:XML 控制字符('<'、'>'、'&' 等)将保持转义状态,直到加载文档。相反,文档未通过验证,因为它正在删除引用实体的任何位置的转义码。
有没有更好的方法来在实体中使用转义字符?
示例代码 (my.xml):
<!ENTITY SQL.typeNot9 "SELECT * FROM my_table WHERE type<>9">
<item name="endFixId" browseType="database" form="example_form" SQLQuery="&SQL.typeNot9;" useRawValue="false" />
输出:xmllint --schema my_schema.xsd my.xml
我的.xml:123:解析器错误:“<” 属性值中不允许使用实体“SQL.typeNot9” me=“endFixId” browseType=“数据库” form=“example_form” SQLQuery=“&SQL.typeNot9;
大型遗留系统,重新排列或重新设计的选择有限。
答:
0赞
LMC
3/14/2023
#1
可能与 XSD 定义相关,因为提供的 XML 片段按预期工作
给定此 XML
<?xml version="1.0"?>
<!DOCTYPE root [
<!ELEMENT item ANY >
<!ENTITY SQL.typeNot9 "SELECT * FROM my_table WHERE type<>9">]>
<root>
<item name="endFixId" browseType="database" form="example_form"
SQLQuery="&SQL.typeNot9;"
useRawValue="false" />
</root>
测试方式xmmlint
xmllint --noent --xpath '//@SQLQuery' tmp.xml ; echo
结果
SQLQuery="SELECT * FROM my_table WHERE type<>9"
评论
0赞
user21397135
3/16/2023
尝试不使用 --noent 选项。
0赞
LMC
3/16/2023
返回这就是我添加 --noent 的原因SQLQuery="&SQL.typeNot9;"
评论
<![CDATA[SELECT...WHERE type<>9]]>