jjzjj

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

coder 2024-07-02 原文

尝试从 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/

有关javascript - XPath 选择在 Microsoft Edge 中不起作用(在 Chrome 和 Firefox 中有效)的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  3. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  4. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  5. ruby-on-rails - Nokogiri:使用 XPath 搜索 <div> - 2

    我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll

  6. ruby - Rails 3 的 RGB 颜色选择器 - 2

    状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基

  7. ruby-on-rails - capybara ::ElementNotFound:无法找到 xpath "/html" - 2

    我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'

  8. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  9. ruby - Watir 更改 Mozilla Firefox 首选项 - 2

    我正在使用Watir运行一个Ruby脚本来为我自动化一些事情。我试图自动将一些文件保存到某个目录。因此,在我的Mozilla设置中,我将默认下载目录设置为桌面并选择自动保存文件。但是,当我开始运行我的脚本时,这些更改并没有反射(reflect)出来。似乎首选项恢复为默认值。我已经包括以下内容require"rubygems"#Optional.require"watir-webdriver"#Forwebautomation.require"win32ole"#Forfilesavedialog.并打开一个新的firefox实例:browser=Watir::Browser.new(:

  10. ruby-on-rails - Rails 单选按钮 - 模型中多列的一种选择 - 2

    我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模

随机推荐