javascript - JavaScript 中不区分大小写的 XPath 节点匹配

标签 javascript xml xpath

我正在尝试使用 JavaScript 来解析 VMAP file 。我目前的工作代码如下所示:

function equalsIgnoreCase(a, b) {
    return a.toLowerCase() == b.toLowerCase();
}

for(var i = 0, l = xml.childNodes.length; i < l; i++) {
    var node = xml.childNodes[i];
    if( equalsIgnoreCase( node.tagName, 'adbreak' ) ) {
        // Do stuff
    } else {
        // Unexpected tag
    }
}

这种方法的问题是,我要检查的标签有很多,而不仅仅是AdBreak(自定义扩展),而且编写大量代码是极其多余的if/else 瀑布形式:

if( equalsIgnoreCase( node.tagName, 'adbreak' ) ) {
    // ...
} else if( equalsIgnoreCase( node.tagName, 'otherTag1' ) {
    // ...
} else if( equalsIgnoreCase( node.tagname, 'otherTag2' ) {
    // ...
} else if....

我理想地希望使用 XPath 来解决我的所有问题。然后我的所有代码都可以压缩成一行代码:

var contentURI = XpathWrapper( xml, 'Extensions/MyExtension/Content' ).iterateNext().text();
var splashScreen = XpathWrapper( xml, 'Extensions/MyExtension/Splash' ).iterateNext().text();
// ...

问题在于 Xpath 区分大小写。我在网上发现了一些建议,说您可以使用 transform 方法使 Xpath 不区分大小写,但这在实践中并没有起作用:

// This fails:
XpathWrapper( xml, "*[transform(node(), 'ABCD...', 'abcd...') = 'extensions']" )

我确实找到了一条有效的建议,但它远没有用处:

// This works:
XpathWrapper( xml, "Extensions | EXTENSIONS | extensions | EXTensions | ..." );

有什么方法可以实现这一点(无需将每个字符串输入 800 种方式)?请注意,我不需要维护原始 XML 的结构,因此如果有一种方法可以在执行任何 Xpath 搜索之前将整个文档简单地转换为小写,这是可以接受的。

最佳答案

我对 JavaScript 世界中的 XPath 了解不多,但仅查看您的 XPath,至少有两件事需要修复:

  1. 使用translate() instead of transform()
  2. 使用 name() 而不是 node() 按元素名称进行匹配

尝试使用此 XPath:

//*[translate(name(), 'ABCD...', 'abcd...') = 'extensions']

关于javascript - JavaScript 中不区分大小写的 XPath 节点匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24517559/

相关文章:

php - 使用 PHP 进行 XML 分页

xsd - 如何使用 libxml2 生成 XML 文件?

javascript - 查询 |如何从选择的html元素中获取选定的项目

javascript - Electron 调整无框窗口的大小

部分 View 刷新后未调用 JavaScript 函数

java - Selenium 定位器 : Nested query with partial matches on multiple elements

python - 如何使用 Selenium 和 xpath 或其他替代方案从 url 获取包含动态数据的表?

javascript - 检查javascript数组值不为空

java - Sax 无效 XML 字符异常

python - 尝试使用 python 抓取网站时出错