我在 XML feed 中收到以下数据:
<imagetag><![CDATA[
http://images.dealer.com/0098/65654e9beaae8aca2eeb7778e723e733x.jpg]
]></imagetag>
我有两个问题:
- 当我尝试验证 XML here 时我收到错误:
The element type "imagetag" must be terminated by the matching end-tag "</imagetag>".
- 我无法找出(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/