簡體   English   中英

XPath選擇在Microsoft Edge中不起作用(適用於Chrome和Firefox)

[英]XPath selection not working in Microsoft Edge (works in Chrome and Firefox)

嘗試從XML文檔中選擇特定行或一組行時,Microsoft Edge始終返回第一行。 另一個瀏覽器處理選擇就好了。

我使用與相關網站上完全相同的代碼和XML進行了一次小型演示。

https://jsbin.com/wufoyisudi/edit?html,output

當在文本框中輸入'aar'時按下提交,第一行的第一個PortERPID將被返回。 但是,當在文本框中輸入'abi'時,應返回第二行的PortERPID。 這在Chrome和Firefox中運行良好,但在Microsoft邊緣不起作用。

XML:

<ROOT>
<FAKE>
    <row PortERPID="DKAAR" PortName="AARHUS"/>
    <row PortERPID="CIABJ" PortName="ABIDJAN"/>
</FAKE>
</ROOT>

JavaScript的:

var val = document.getElementById("filter").value;
var xml = '<ROOT><FAKE>' + 
          '<row PortERPID="DKAAR" PortName="AARHUS"/>' + 
          '<row PortERPID="CIABJ" PortName="ABIDJAN"/>' + 
          '</FAKE></ROOT>';

var parser=new DOMParser();
xmlDoc=document.implementation.createDocument("","",null);
xmlDoc.async="false";               
xmlDoc = parser.parseFromString(xml,"text/xml");

var portsERPIDXpath = "//row[@PortName[contains(translate(.,'abcdefghijklmnopqrstuvwxyz'," + " 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),'" + val.toUpperCase() + "')]]/@PortERPID";
var ERPIDS = xmlDoc.evaluate(portsERPIDXpath, xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
var ERPID = ERPIDS.snapshotItem(0).value;
document.getElementById("result").innerHTML = ERPID;

請記住,這是舊代碼,它將被新系統取代,因此完全重寫不是一種選擇。

有關可能的修復/解決方法的任何想法?

編輯:

我能夠通過重寫XPATH表達式來解決問題

//row[contains(translate(@PortName,'abcdefghijklmnopqrstuvwxyz'," + " 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),'" + val.toUpperCase() + "')]/@PortERPID

我不知道為什么這個工作,因為它基本上是相同的表達,但它的工作原理。

也許querySelector有更好的支持:

      var el = xmlDoc.querySelector('row[PortName*="' + value.toUpperCase() + '"]');
      if (el != null) {
        var ERPID = el.getAttribute('PortERPID');
        document.getElementById("result").innerHTML = ERPID;
      }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM