测试以查看xml中是否有空文本节点

时间:2013-06-22 22:05:41

标签: javascript xml dom

使用Ajax获取XML数据。关于空白文本节点的问题

我在这里读到这个问题/答案 Javascript/XML - Getting the node name

这有助于我理解结构是如何设置的,但我仍然有一两个问题......当他提到这一部分时:

“带有回车符和一些空格或制表符的文本节点”

你会如何测试看到你有这样一个空的文本节点?我试过测试看看:

if nodeValue == null
nodeValue == "null"
nodeValue == ""
nodeValue == " "

这些似乎都没有起作用

我想也许长度为0所以我测试了.length并返回5(1个返回键和4个标签..在那里添加了一个额外的标签并再次测试它返回6)

然后我用谷歌搜索如何删除空格并使用这些:

.replace(/\s+/g, ' ');
.replace(/^\s+|\s+$/g, '');

既没有奏效,仍然说.length仍然是5

我想要测试的原因是因为如果我事先不知道每个元素节点名称或者确切地知道如何设置DOM,那该怎么办呢。

或者是否有更好的导航方式而无需检查文本节点是否只是标签/空格/返回键?

1 个答案:

答案 0 :(得分:2)

.replace(/^\s+|\s+$/g, '');有效,除非空格/制表符不是空格和制表符,而是其他各种类似Unicode空格的字符之一。所以我猜你没有正确使用它。

这将是如何使用它:

if (!textNode.nodeValue.replace(/^\s+|\s+$/g, '')) {
    // Node is empty
}

示例:Live Copy | Live Source

var xml = parseXml("<test>\n\t\t\t</test>");
var textNode = xml.documentElement.firstChild;
display("textNode.nodeValue.length = " +
        textNode.nodeValue.length);
display('Is "empty"? ' +
        (!textNode.nodeValue.replace(/^\s+|\s+$/g, '')));

function display(msg) {
  var p = document.createElement('p');
  p.innerHTML = String(msg);
  document.body.appendChild(p);
}

输出:

textNode.nodeValue.length = 4
Is "empty"? true

parseXMLfrom this answer。)


但我们真的不需要做replace(尽管这样做的开销微不足道)。像这样的测试就可以做到:

if (/^\s*$/.test(textNode.nodeValue)) {
    // The node is "empty"
}

该正则表达式(两端带有锚点的零个或多个空格字符)只匹配已经为空或仅由空格字符组成的字符串。