XPathResult 的评估返回错误

Cod*_*boi 5 javascript xml xpath xmlhttprequest xml-parsing

我有一个 xml,我想读取它的<block>节点。但是当我在 XPath 下执行时,它给了我一个错误。

我试图解析的 xml:

   let x = `<xml>
    <block type="block_onGreenFlagClicked" id=";]jZ*Zs|[L-Sr{nhCB%V" x="25" y="0">
         <field name="NAME1">When</field>
         <statement name="function_name">
            <block type="helper_Player__walkSecondsDrop" id="9lo_/{gKTxB6/FRH2Pw">
             <field name="LABEL">Player.</field>
             <field name="DROP_Player__walkSecondsDrop$">walkForwardForNSeconds</field>
           </block>
       </statement>
    </block>
    </xml>`;



let doms = new DOMParser()
let v = doms.parseFromString(x, 'text/xml')
let r =  v.evaluate('/block',v, null, XPathResult.ANY_TYPE, null)
Run Code Online (Sandbox Code Playgroud)

下面是结果说:

   let x = `<xml>
    <block type="block_onGreenFlagClicked" id=";]jZ*Zs|[L-Sr{nhCB%V" x="25" y="0">
         <field name="NAME1">When</field>
         <statement name="function_name">
            <block type="helper_Player__walkSecondsDrop" id="9lo_/{gKTxB6/FRH2Pw">
             <field name="LABEL">Player.</field>
             <field name="DROP_Player__walkSecondsDrop$">walkForwardForNSeconds</field>
           </block>
       </statement>
    </block>
    </xml>`;



let doms = new DOMParser()
let v = doms.parseFromString(x, 'text/xml')
let r =  v.evaluate('/block',v, null, XPathResult.ANY_TYPE, null)
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么?任何人都可以指导我吗?

小智 5

代码没有任何问题。所述/blockXPath表达式只是选择任何操作,因为根元素是一个xml元件。将表达式更改为//block选择这两个block元素。例子:

let x = `<xml>
    <block type="block_onGreenFlagClicked" id=";]jZ*Zs|[L-Sr{nhCB%V" x="25" y="0">
         <field name="NAME1">When</field>
         <statement name="function_name">
            <block type="helper_Player__walkSecondsDrop" id="9lo_/{gKTxB6/FRH2Pw">
             <field name="LABEL">Player.</field>
             <field name="DROP_Player__walkSecondsDrop$">walkForwardForNSeconds</field>
           </block>
       </statement>
    </block>
    </xml>`
let doms = new DOMParser()
let v = doms.parseFromString(x, 'text/xml')
let r = v.evaluate('//block', v, null, XPathResult.ANY_TYPE, null)

var s = new XMLSerializer();
var t = document.getElementById("output");
while ((n = r.iterateNext())) {
  t.value += (s.serializeToString(n)) + "\n";
}
Run Code Online (Sandbox Code Playgroud)
<body>
  <textarea id="output" rows="15" cols="60"></textarea>
</body>
Run Code Online (Sandbox Code Playgroud)