从 javascript 读取 xml 中的 cdata
<data>
<![CDATA[test]]>
</data>
我得到了空白。
var dataNode=Ext.DomQuery.selectNode('data',xml);
console.log(dataNode.childNodes[0].nodeValue);
console.log(dataNode.nodeValue);
<data>
<![CDATA[test]]>
</data>
I am getting blanks.
var dataNode=Ext.DomQuery.selectNode('data',xml);
console.log(dataNode.childNodes[0].nodeValue);
console.log(dataNode.nodeValue);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
虽然如果没有正在解析的 XML,我们无法确定,但从
childNodes[0]
(firstChild
) 中“获取空白”的通常原因是,有一个父级开始标记和要查找的节点之间的空白文本节点:在保留 CDATA 部分的 XML 解析器上,这将为
data
元素提供三个子元素:一个包含换行符的文本节点和一些空间; CDATASection 节点;和另一个带有换行符的文本节点。所以你可以采用
childNodes[1]
,但它有点脆弱......特别是对于将CDATA部分转换为文本的XML解析器来说它会崩溃,你在其中' d 获取一个包含foo
和所有空格的 Text 子级。可能更好地采用元素的
textContent
(当然,对于 IE,回退到innerText
除外)。Whilst we can't say for sure without the XML that's being parsed, the usual reason for ‘getting blanks’ from
childNodes[0]
(firstChild
) is that there is a whitespace Text node between the parent's start-tag and the node you are looking for:On an XML parser that retains CDATA sections, that'll give the
data
element three children: a Text node containing a newline and some spaces; the CDATASection node; and another Text node with a newline.So you could take
childNodes[1]
, but it's a bit fragile... in particular it would break for an XML parser that turns CDATA sections into text, where you'd get a single Text child containingfoo
and all the whitespace. Probably better to take thetextContent
of the<data>
element (except of course with fallback toinnerText
for IE).尝试 .contents() 返回整个内容(包括 CDATA) - http://api.jquery.com/contents /
Try .contents() to return the whole thing (including CDATA) - http://api.jquery.com/contents/