繁体   English   中英

XPath条件文本节点选择

[英]XPath conditional text node selection

我需要构造一个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后代,该table是任何form的后代,其form具有action属性“ submit.html”的任何form

仅包含空格的文本节点将从文档表示中剥离-即实际上将没有节点。 这意味着您无法访问文本本身,但是您可以使用not()匹配缺少文本节点的父对象-类似于:

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

尽管就您而言,我想这将比您实际打算的更具侵略性。 顺便说一句,要小心这些匹配,它们效率不高,而且攻击性也很高。

(我刚刚注意到这不是XSLT问题!如果您在JS领域,是否考虑过使用DOM方法来获取列表?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM