从javascript读取xml中的cdata

时间:2009-11-15 00:28:48

标签: xml cdata

<![CDATA [测试]] GT; 我得到了空白。

var dataNode=Ext.DomQuery.selectNode('data',xml);
console.log(dataNode.childNodes[0].nodeValue);
console.log(dataNode.nodeValue);

3 个答案:

答案 0 :(得分:5)

虽然我们不能确定没有正在解析的XML,但是从childNodes[0]firstChild)“获取空白”的通常原因是父节点之间有一个空白的Text节点start-tag和您要查找的节点:

<data>
    <![CDATA[ foo ]]>
</data>

在保留CDATA部分的XML解析器上,它将为data元素提供三个子节点:一个包含换行符和一些空格的Text节点; CDATASection节点;和另一个带换行符的Text节点。

所以你可以接受childNodes[1],但它有点脆弱......特别是它会破坏XML解析器,将CDATA部分转换成文本,你会得到一个单个文本子项包含foo和所有空格。可能更好地采用textContent元素的<data>(当然除了回溯到innerText的IE)。

答案 1 :(得分:0)

尝试使用.contents()返回整个内容(包括CDATA) - http://api.jquery.com/contents/

答案 2 :(得分:0)

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();