【问题标题】:read cdata in xml from javascript从 javascript 读取 xml 中的 cdata
【发布时间】:2010-12-16 16:57:10
【问题描述】:

我越来越空白了。

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

【问题讨论】:

  • 我们能看到有问题的 XML 吗?
  • 没有问题,没有上下文,什么都没有。

标签: xml cdata


【解决方案1】:

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

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

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

所以你可以采用childNodes[1],但它有点脆弱......特别是它会破坏将CDATA部分转换为文本的XML解析器,在那里你会得到一个单一的文本包含foo 和所有空格的子项。使用&lt;data&gt; 元素的textContent 可能更好(当然,IE 回退到innerText 除外)。

【讨论】:

    【解决方案2】:
    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();
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-07-18
        • 2017-02-12
        • 1970-01-01
        • 2011-07-10
        • 2012-09-11
        • 1970-01-01
        • 1970-01-01
        • 2014-01-07
        • 1970-01-01
        相关资源
        最近更新 更多