我需要计算非空的所有 b 节点(因此结果应为2)。
function printScriptTextContent(script)
{
var xhr = new XMLHttpRequest();
xhr.open("GET",script.src)
xhr.onreadystatechange = function () {
if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
console.log("the script text content is",xhr.responseText);
}
};
xhr.send();
}
Array.prototype.slice.call(document.querySelectorAll("script[src]")).forEach(printScriptTextContent);
我正在使用下面的代码,但这会返回所有节点的计数(包括空)。
<a>
<b>1</b>
<b/>
<b>g</b>
</a>
答案 0 :(得分:2)
对不起,这不是答案!我完全误解了这一点,并认为你正在寻找空节点。 GarethD已经给出了一个合适的答案(同样的想法,反之亦然)。
我不会删除它,因为它可能会帮助其他人......
空元素<b/>
(与<b></b>
相同)已存在,但没有text()
。
DECLARE @xml XML =
N'<a>
<b>1</b>
<b/>
<b></b>
<b>g</b>
</a>';
select @xml.value('count(/a/b[empty(text())])', 'int')
这会返回2,因为有<b/>
和<b></b>
。
为了完整起见,你可能会否定谓词,这实际上是你需要的结果:
select @xml.value('count(/a/b[not(empty(text()))])', 'int')
答案 1 :(得分:2)
如果您使用的是//a/b/text()
而不只是//a/b
,那么您的计数为2
DECLARE @x XML= '<a><b>1</b><b/><b>g</b></a>';
SELECT @x.value('count(//a/b/text())', 'int');
答案 2 :(得分:1)
使用此XPath表达式
count(/a/b[normalize-space(text())=''])
在您的代码中加入它看起来像这样:
select top 1 rc.XmlContent.value('count(/a/b[normalize-space(text())=""])', 'int') from Table rc