gpt4 book ai didi

javascript - 如果 xml 节点中没有值,如何让我的小部件不崩溃?

转载 作者:行者123 更新时间:2023-11-28 03:01:23 25 4
gpt4 key购买 nike

我正在获取一个 xml 文件并希望从中获取数据。xml 的来源并不重要,但我必须获得某个字段的是:

tracks = xmlDoc.getElementsByTagName("track");
variable = tracks.item(i).childNodes.item(4).childNodes.item(0).nodeValue;

现在这就像一个魅力,除非节点中没有值。所以如果结构是这样的:

<xml>
<one>
<two>nodeValue</two>
</one>
<one>
<two></two>
</one>
</xml>

小部件将在第二个“one”节点上崩溃,因为“two”节点中没有值。控制台显示:

TypeError: tracks.item(i).childNodes.item(4).childNodes.item(0) has no properties

关于如何让小部件将空视为空字符串(null、空或“”)而不是崩溃,有什么想法吗?我猜测可能是数据getValue()文本或其他内容。

使用

var track= xmlDoc.getElementsByTagName('track')[0];
var info= track.getElementsByTagName('artist')[0];
var value= info.firstChild? info.firstChild.data : '';

不起作用并返回“TypeError:轨道没有属性”。这是第二行调用艺术家的地方。

最佳答案

在访问“two”节点的数据之前,测试其是否有子节点。

childNodes.item(i)(或 JavaScript 简单形式 childNodes[i])通常应该避免,它有点脆弱,依赖于空白文本节点位于确切的预期位置。

我会做这样的事情:

var tracks= xmlDoc.getElementsByTagName('track')[0];
var track= tracks.getElementsByTagName('one')[0];
var info= track.getElementsByTagName('two')[0];
var value= info.firstChild? info.firstChild.data : '';

(如果你事先不知道'one'和'two'的标签名,你可以使用'getElementsByTagName('*')'来获取所有元素,只要你不需要支持IE5,这不起作用。)

最后一行的替代方法是使用一种方法来读取节点内的所有文本,包括其任何子节点。如果节点最多只包含一个 Text 节点,这并不重要,但如果树可以非规范化或包含 EntityReferences 或嵌套元素,则这可能很有用。过去,人们必须编写一个递归方法来获取此信息,但现在大多数浏览器都支持 DOM Level 3 textContent 属性和/或 IE 的 insideText 扩展:

var value= info.textContent!==undefined? info.textContent : info.innerText;

关于javascript - 如果 xml 节点中没有值,如何让我的小部件不崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/671861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com