从 javascript 读取 xml 中的 cdata

发布于 2024-08-11 08:19:32 字数 321 浏览 9 评论 0原文

<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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小伙你站住 2024-08-18 08:19:32

虽然如果没有正在解析的 XML,我们无法确定,但从 childNodes[0] (firstChild) 中“获取空白”的通常原因是,有一个父级开始标记和要查找的节点之间的空白文本节点:

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

在保留 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:

<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).

野鹿林 2024-08-18 08:19:32
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();
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();
黯然#的苍凉 2024-08-18 08:19:32

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

Try .contents() to return the whole thing (including CDATA) - http://api.jquery.com/contents/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文