除了使用下划线键以外,如何使用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 message
string。 如果我在包含<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 }