Есть ли способ решить x ошибка? - PullRequest
1 голос
/ 22 мая 2019

У меня есть фрагмент кода ниже, который работает только с IE из-за активного синтаксического анализатора X, и мне нужно запустить его в Chrome и других последних браузерах.

< script language = "jscript" type = "text/javascript" > 
 function Transform1() { 
   var xml1 = new ActiveXObject("Microsoft.XMLDOM"); 
   xml1.async = false; xml1.load(frmSoap.TestXml.value);
   frmSoap.Body.value = xml1.xml; 
 } 
< /script>

Я попытался исправить это, используя приведенные ниже изменения, но у меня это не сработало, и вместо этого перестал работать, т.е. тоже.

function Transform1()

  if (window.DOMParser) { 
   var parser, xml1; 
   parser = new DOMParser(); 
   xml1 = parser.parseFromString(frmSoap.TestXml.value,"text/xml");
   frmSoap.Body.value = xml1.xml; 
  } else { 
   var xml1 = new ActiveXObject("Microsoft.>XMLDOM"); 
   xml1.async = false; 
   xml1.load(frmSoap.TestXml.value);
   frmSoap.Body.value = xml1.xml; 
  }

Может кто-нибудь помочь мне решить эту проблему.

1 Ответ

0 голосов
/ 23 мая 2019

Вот подход, который будет работать для вас во всех браузерах. Это делается с помощью createDocument(), а затем браузер анализирует XML для вас.

Пожалуйста, обратитесь к комментариям в коде.

//Mock
const frmSoap = {
  TestXml: {
    value: `<productListing title="ABC Products"> 
  <product> 
    <name>Product One</name> 
    <description>Product One is an exciting new widget that will 
      simplify your life.</description> 
    <cost>$19.95</cost> 
    <shipping>$2.95</shipping> 
  </product>
  </productListing>`
  }
}
// Create an XHTML document
var doc = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'xhtml', null);
// Add body
var body = document.createElementNS('http://www.w3.org/1999/xhtml', 'body');
doc.documentElement.appendChild(body);
// Parse the XML document and place it in the new XML doc body
body.innerHTML = frmSoap.TestXml.value;
//Parse the XML to produce output
const title = body.querySelector('productListing').getAttribute('title');
const productName = body.querySelector("product name").textContent;
const productDescription = body.querySelector("product description").textContent;
//Use the XML data
document.getElementById("output").innerHTML = `<h1>${title}</h1><span>Product Name:</span> ${productName}, <br><span>Product Description:</span> ${productDescription}`;
// Remove the doc when no longer needed
doc = null;
span {
  font-weight: bold;
}
<div id="output"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...