-4

<![CDATA[test]]> 我得到了空白。

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

3 回答 3

5

虽然我们不能肯定地说没有正在解析的 XML,但从childNodes[0]( firstChild) 中“获取空白”的通常原因是父级的开始标签和您正在寻找的节点之间有一个空白文本节点:

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

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

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

于 2009-11-15T01:53:56.960 回答
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();
于 2020-08-13T18:27:15.430 回答
-1

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

于 2011-11-18T17:18:45.503 回答