如何选择包含特定字符串的所有脚本节点

时间:2012-09-10 22:16:53

标签: c# html xml xpath

假设我在HTML文档中有几个脚本节点,我如何选择包含特定源值的所有脚本节点:

<head>
</head>
<body>
    <script type="text/javascript">
        blah();
    </script>
</body>

仅选择包含函数blah的正文中的脚本节点的正确方法是什么?

更新

我试过了//script[contains(text(), 'blah')],但它没有用。

2 个答案:

答案 0 :(得分:1)

// script [contains(。,'blah')应该有效 和...之间的不同 。和text()是可以有多个文本节点(理论上),text()匹配所有文本节点的序列。

另一种可能性是你有XHTML,你需要将XHTML命名空间绑定到前缀,例如“h”,并且说,// h:script [contains(。,'blah')],以及如何做到这一点取决于确切的调用环境,例如: registerNamespace()或其他东西。您需要在文档中注册xmlns =“....”中的相同URI,很可能是http://www.w3.org/1999/xhtml,例如如果你在.net:

中使用XmlDocument,就像这样
System.Xml.XmlNamespaceManager xmlnsManager =
                 new System.Xml.XmlNamespaceManager(xmldoc.NameTable);

xmlnsManager.AddNamespace("h", "http://www.w3.org/1999/xhtml", xmlnsManager);

result = xmldoc.SelectNodes('//h:script[contains(., 'blah')]')

答案 1 :(得分:0)

使用javascript搜索功能迭代每个脚本元素怎么样?

http://www.w3schools.com/jsref/jsref_search.asp

<script type="text/javascript">
    var s = document.getElementsByTagName('script'); 

    for (var i = 0; i < s.length; i++) {
        var src = s[i].innerText;
        var result = src.search("blah()");
        if (result != -1) {     
            console.log(src);
        }
    }

</script>

脚本应该进入页面加载逻辑,以处理在此之后发生的所有脚本元素。