除了使用下划线键以外,如何使用xml2js访问XML元素文本?

我有一块XML看起来像这样:

<errorMessage> <payload encoding="plain">The error message</payload> </errorMessage> 

我使用xml2jsparsing器:

 var parser = new xml2js.Parser({ explicitCharKey: false, trim: true, explicitRoot: true, mergeAttrs: true }); parser.parseString(myString, function(err, result) { var payload = result.errorMessage.payload; // how do I access the error message text? var errorMessage = payload[0]['_']; }); 

我需要访问payload内容元素中The error messagestring。 如果我在包含<payload>的节点上使用_键,则正确检索文本,但使用下划线魔术键看起来可疑。

这是推荐的方式吗? 有没有更清洁的方法?

xml2js选项文档说明了这一点:

 attrkey (default: $): Prefix that is used to access the attributes. charkey (default: _): Prefix that is used to access the character content. 

所以它看起来像element._是如何访问element的文本内容。 如果你想命名这个键而不是_ (比如textContent ),你可以像这样改变它:

 parseString(xml, {charkey: 'textContent'}, function(err, result) { // result.element.textContent will hold the text value of result.element }); 

但是,我还没有find一种方法使文本内容始终可用_键。 例如,这个:

 xml2js.parseString( '<element>1.23</element>', // <-- notice that this has no attributes function(err, result) { console.log(JSON.stringify(result)); } ); 

输出这个:

{"element":"1.23"}

但是如果你改变XML来添加一个属性,比如<element attr="value">1.23</element> ,你会得到这个:

{"element":{"_":"1.23","$":{"attr":"value"}}}

我需要parsingXML输出有时有属性,但有时不。 可能有更好的办法,但是当我需要一个元素的文本时,我只需要调用getText(element) ,其中getText是:

 var getText = function(elt) { if (typeof(elt) === 'string') return elt; if (typeof(elt) === 'object' && elt.hasOwnProperty('_')) return elt._; return ''; // or whatever makes sense for your case }