javascript - XML CDATA 错误 : The element type <X> must be terminated by the matching end-tag </X>

标签 javascript regex xml cdata

我在 XML feed 中收到以下数据:

<imagetag><![CDATA[
http://images.dealer.com/0098/65654e9beaae8aca2eeb7778e723e733x.jpg]
]></imagetag>

我有两个问题:

  1. 当我尝试验证 XML here 时我收到错误:The element type "imagetag" must be terminated by the matching end-tag "</imagetag>".
  2. 我无法找出(Javascript)正则表达式来提取网址。我最接近的是:([\s\S]*)<imagetag><!\[CDATA\[([\s\S]*)\]\]><\/imagetag>([\s\S]*) 。如果 .jpg] 之后没有换行符,则效果非常好,但是有!

我猜这两个问题是相关的,但我不确定原因。任何帮助表示赞赏!

最佳答案

首先,认识到您不需要 CDATA 来表示 XML 中的 URL。

其次,使用 XML 解析器收到错误的原因是您的数据不是 XML。您的 CDATA 部分格式错误:CDATA结束标记, CDEnd ,其中不能有换行符:

[18]    CDSect     ::=      CDStart CData CDEnd
[19]    CDStart    ::=      '<![CDATA['
[20]    CData      ::=      (Char* - (Char* ']]>' Char*))
[21]    CDEnd      ::=      ']]>'

因此,您的 XML 解析器发出错误是完全正确的。

前进的方向是not to try to parse XML via regex (尽管人们可能会对特定问题进行抽查/修复,例如查找并修复带有嵌入空格的 ]]> )。前进的方向是修复数据。以下是为正确使用 CDATA 而修复的数据:

<imagetag><![CDATA[
http://images.dealer.com/0098/65654e9beaae8aca2eeb7778e723e733x.jpg
]]></imagetag>

<imagetag><![CDATA[http://images.dealer.com/0098/65654e9beaae8aca2eeb7778e723e733x.jpg]]></imagetag>

重要: CDStart必须是<![CDATA[CDEnd必须是]]>完全没有换行符。另请注意 ]]>不能出现在 CDATA 部分中; CDATA 节不能嵌套。

如果无法修复数据,请拒绝该数据。像 XML 一样处理格式不正确的文本数据是不合适的;它只会使问题永久化。

关于javascript - XML CDATA 错误 : The element type <X> must be terminated by the matching end-tag </X>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43956185/

相关文章:

xml - XML XPath问题

java - 为什么当我添加尖锐信号时,Java ReplaceAll with Regex 边界不起作用?

javascript - 使用 RegExp 了解一些 JavaScript

c# - 将 IEnumerable<int> 作为参数传递给 WCF 服务

java - netbeans 6.* 中的解析延迟

java - 正则表达式匹配相同数字的模式

xml - Node.js 中的 WCF Web 服务

javascript - FilePicker - 单击框外会丢失所有上传

javascript - javascript 中的可点击图像应该是互斥的

javascript - 两个 div 同时滚动,直到一个到达底部