我在XML Feed中收到以下数据:
<imagetag><![CDATA[
http://images.dealer.com/0098/65654e9beaae8aca2eeb7778e723e733x.jpg]
]></imagetag>
我有两个问题:
The element type "imagetag" must be terminated by the matching end-tag "</imagetag>".
([\s\S]*)<imagetag><!\[CDATA\[([\s\S]*)\]\]><\/imagetag>([\s\S]*)
。如果在.jpg]
之后没有换行符,那么这种方法很有效,但是有!我猜这两个问题是相关的,但我不确定原因。任何帮助表示赞赏!
答案 0 :(得分:1)
首先,要意识到您不需要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
必须为]]>
, 完全没有换行符< / EM> 即可。另请注意,]]>
不能出现在CDATA部分中; CDATA部分无法嵌套。
如果无法修复数据,请拒绝数据。处理文本数据不是很合适,就好像它是XML一样;它只会使问题长期存在。