gpt4 book ai didi

php - 使用 DTD 将元素定义为 CDATA?

转载 作者:数据小太阳 更新时间:2023-10-29 02:37:02 26 4
gpt4 key购买 nike

简而言之,是否可以使用 DTD 将元素定义为包含 CDATA?

我正在调用第三方 API,该 API 在元素内生成一些无效字符。具体来说,数据包含一些 HTML 实体,如 。当我尝试使用 SimpleXML 解析此 XML 时,我当然会收到解析器错误“实体‘rsquo’未定义”。这是我正在处理的一个简单的示例结构:

<items>
<item>
<name>Jim Smith</name>
<description>Jim&rsquo;s description breaks my parser</description>
</item>
</items>

因为我无法控制修复 API 响应...我已经使用这个肮脏的技巧在我尝试解析它之前将 CDATA 部分注入(inject)问题元素:

$xml = str_replace("<description>", "<description><![CDATA[", $xml);
$xml = str_replace("</description>", "]]></description>", $xml);

这解决了我的问题,但开销可能太大了,你不觉得吗? XML 可以是 30K 到 100K 之间的任何数据。

我宁愿使用 DTD,但在我的生活中我找不到任何允许定义 CDATA 的规范(以同样的方式我可以定义 PCDATA).以下是我想要做的事情,但当然,由于我正在尝试做的“#CDATA”定义,它是无效的:

<!DOCTYPE ITEMS [
<!ELEMENT ITEMS (ITEM)>
<!ELEMENT ITEM (NAME, DESCRIPTION)>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT DESCRIPTION (#CDATA)>
]>

感谢您的任何见解!

最佳答案

在 SGML DTD 中是可能的(例如 the HTML 4.01 script element ),但在 XML DTD 中不是(因此是 the change for XHTML 1.0 )。

关于php - 使用 DTD 将元素定义为 CDATA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com