【发布时间】:2019-07-19 07:47:49
【问题描述】:
我有一个传递给 XML 解析器的 XML 文件,我需要从外部资源加载内容,如下所示:
<!DOCTYPE foo [<!ELEMENT foo ANY >
<!ENTITY data SYSTEM "file:///d:/data.txt" >]>
<component id="200">
<![CDATA[&data;]]>
</component>
我希望将数据写入 CDATA 标记内,但是,这只是引入了<![CDATA[&data;]]>,并且由于 CDATA 标记被认为是我猜的注释,因此永远不会获取外部资源数据。
数据必须在 CDATA 标记内才能被接受。 如何做到这一点?
谢谢!
【问题讨论】:
-
请edit您的问题包括您必须读取/解析XML文档的源代码以及您如何从
<component>标签读取数据。还要添加您正在使用的编程语言的语言标签。 -
由于名为Billion laughs attack 的攻击而扩展实体时要小心。
-
我无法控制 XML 解析器,它是一个从我那里获取 XML 的 API,并且数据文件位于服务器中我可以上传文件的某个位置。
-
根据定义,
<![CDATA[...]]>中的所有内容都不会被“解析”。因此,当您编写<![CDATA[&data;]]>时,您将获得字符串值"&data;"。但由于您提供的是 XML,因此您可以在将数据发送到 API 之前插入数据。 -
我不能,数据位于API服务器上,只有API服务器可以访问它。它是由各种用户上传的。有没有办法使用 XML 将某些内容包装在 CDATA 标记中?
标签: xml