Javascript - DomParser - 如何确定非 XML 字符串

Javascript - DomParser - how to determine non XML string

这是我需要做的事情:

  1. 解析任何给定的字符串,确保它是 XML 格式。
  2. 如果是XML格式,则计算节点数。并且 return 正确。
  3. Return 如果字符串不是 XML,则为 false。

我试图使用 DOMParser 来完成这项工作,但是,无论我将什么字符串提供给 DOMParser,它总是将其视为 XML,并计算它有 6 个节点。

这是我的脚本:

function invoke(msg){
try{
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(msg,"text/xml");
    var nodes = xmlDoc.getElementsByTagName('*')
    console.log('The string is: ' + msg);
    console.log('This string has ' + nodes.length + ' nodes.');
    return true;
 }

 catch(err){
     console.log('The string is: ' + msg);
     console.log('Cannot read this string');
     return false;
}
}

invoke("hello world");
invoke("▒0藤▒]Ir▒|̆x▒$۾▒e▒(E▒>Ӆ▒▒▒ܩ▒b▒b▒▒=▒▒\q▒▒▒▒▒1▒▒▒");
invoke("<music><album>Beethoven</album></music>");

下面的屏幕截图是我测试的输出,如果字符串是 XML:

,它似乎正确地计算了总节点数

谁能帮忙。

干杯, 文森特

在 xmlDoc 中检查 parsererror

function invoke(msg){
  try{
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(msg,"text/xml");
    if( xmlDoc.getElementsByTagName('parsererror').length ) {
      console.log('The string is: ' + msg);
      console.log('Cannot read this string');
      return false;
    } else {
      var nodes = xmlDoc.getElementsByTagName('*');
      console.log('The string is: ' + msg);
      console.log('This string has ' + nodes.length + ' nodes.');
      return true;
    }
  }
  catch(err){
   console.log('The string is: ' + msg);
   console.log('Cannot read this string');
   return false;
  }
}