XPath在节点选择

时间:2017-04-03 07:28:52

标签: xpath

我有一个相当深度嵌套的xml结构,我想在选择一个节点后找到一个具有特定值的元素。在下面的示例中,我有一个'B'数组,在选择每个'B'节点后,我想得到一个以'history'开头的子节点(不一致)的文本

<A>
    <Items>
        <B>
            <C>
                <D>history: pressed K,E</D>  // could be nested anywhere
            </C>
        </B>
        <B>
            <C>
                <E>history: pressed W</E>
            </C>
        </B>
    </Items>
</A>


    // Select the nodes from the array (B)
var nodes = select(xmldoc, "//A/Items/B");

    // Iterate through the nodes.
nodes.forEach(node){

    // is it possible to select any element that starts with the text 'history' from the already selected node.
var history = select(node, "???[starts-with(.,'history')]");

我见过的所有样本都以:// * [text()]从结构的根目录进行搜索。

1 个答案:

答案 0 :(得分:0)

it('check export name', function(done) {
  locale.ready('export')
    .then(function() {
      expect(myService.getExcelName()).toBe('Status Report');
      done();
    })
    .catch(done.fail);
});

看起来会像你想要的那样。

选择//B//*[starts-with(normalize-space(), 'history')] 的任何后代元素,其文字内容以<B>开头。

通常不需要手动迭代来查找更多节点。 XPath为你做到了。如果由于某些其他原因必须进行迭代,请使用上下文节点'history'进行选择。

.

如果您实际上正在寻找“任何文本节点......”

nodes.forEach(function (node) {
    var history = select(node, "./*[starts-with(.,'history')]");
});

“任何没有其他子元素的元素节点......”

//B//text()[starts-with(normalize-space(), 'history')]