read cdata in xml from javascript
<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);
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:
<data>
<![CDATA[ foo ]]>
</data>
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 containing foo
and all the whitespace. Probably better to take the textContent
of the <data>
element (except of course with fallback to innerText
for IE).
const parser = new DOMParser();
const xml = parser.parseFromString('XML_GOES_HERE', 'text/xml').documentElement;
const someElement = xml.getElementsByTagName('MY_TAG');
// using `wholeText` will allow us to read CDATA when it's located in a new line
const cdataValue = someElement?.firstChild?.wholeText?.trim();
Try .contents() to return the whole thing (including CDATA) - http://api.jquery.com/contents/
精彩评论