我需要构造一个xpath字符串,以选择具有以下条件的某个表的所有后代:


该表是具有特定action属性值的表单的后代。
选定的后代是文本节点。
文本节点内容只能包含空格。


它可能看起来像:

//form[@action = "submit.html"]//table//text()[ ...? ]


任何提示将不胜感激。谢谢。

编辑:这是我以前的工作折衷方案:

function KillTextNodes(rootpath)
{
    XPathIterate(rootpath + '//text()', function(node)
    {
        var tagname = node.parentNode.tagName;
        if (tagname != 'OPTION' && tagname != 'TH')
            Kill(node);
    });
}


这是基于公认答案的我的功能:

function KillTextNodes(rootpath)
{
    XPathIterate(rootpath + '//text()[not(normalize-space())]', function(node) { Kill(node); });
}


为了稍微解释一下我的动机-我正在用Javascript遍历DOM,并遇到了很多其他人遇到的相同问题,即意外的空文本节点使结果无效。该功能通过简单地删除所有空文本节点为我提供了很多帮助,从而使我的迭代逻辑保持简单。

最佳答案

嗨,您好。我需要构造一个xpath
  选择一个字符串的所有后代的字符串
  具有这些条件的某些表:
  
  •表格是表格的后代
  具有特定的动作属性
  值。
  
  •选择的后代是
  文本节点。
  
  •文本节点内容可以
  仅包含空格。


使用:

//form[@action = "submit.html"]//table//text()[not(normalize-space())]


这将选择其中仅包含空格并且是任何table的后代的所有文本节点,这些form是具有action属性且值为“ submit.html”的任何的后代。

07-24 16:47