gpt4 book ai didi

javascript - XPath 选择在 Microsoft Edge 中不起作用(在 Chrome 和 Firefox 中有效)

转载 作者:数据小太阳 更新时间:2023-10-29 02:44:24 26 4
gpt4 key购买 nike

尝试从 XML 文档中选择特定行或一组行时,Microsoft Edge 始终返回第一行。其他浏览器可以很好地处理选择。

我使用与相关网站上完全相同的代码和 XML 做了一个小型演示。

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

当在文本框中输入“aar”并按下提交时,第一行的第一个 PortERPID 是 returnerd。但是,当在文本框中输入“abi”时,应返回第二行的 PortERPID。这在 Chrome 和 Firefox 中运行良好,但在 Microsoft edge 中不起作用。

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;
}

关于javascript - XPath 选择在 Microsoft Edge 中不起作用(在 Chrome 和 Firefox 中有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34747104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com