Javascript 如果名称未知(变化),则xml2js获取根节点obj

Javascript 如果名称未知(变化),则xml2js获取根节点obj,javascript,node.js,xml,xml2js,Javascript,Node.js,Xml,Xml2js,我在Aguilar CLI 9项目中使用xml2js解析xml,并想知道如果请求时名称未知(不同),如何获取根节点obj。例如,以下查询语法用于获取根节点obj和属性值: result.Home.$.Name; 但是,在请求时,如果root将在家、Foo等,我将不会这样做。我尝试了以下方法,但没有成功: result[0].$.Name; result.root.$.Name; 另外,我对Angular和Typescript非常陌生,有人能告诉我一些关于使用什么查询语法的好文档吗?不确定这

我在Aguilar CLI 9项目中使用xml2js解析xml,并想知道如果请求时名称未知(不同),如何获取根节点obj。例如,以下查询语法用于获取根节点obj和属性值:

result.Home.$.Name;
但是,在请求时,如果root将在家、Foo等,我将不会这样做。我尝试了以下方法,但没有成功:

result[0].$.Name;

result.root.$.Name;
另外,我对Angular和Typescript非常陌生,有人能告诉我一些关于使用什么查询语法的好文档吗?不确定这是否是特定于js的xml2js,typescript。我习惯于使用xpath进行查询,所以这是非常不同的


提前谢谢

xml2js返回的顶级对象只有一个自己的属性,该属性对应于根元素的名称。我们可以利用这些知识访问与根XML元素对应的属性,而无需静态地知道元素名称

首先,我们将获得结果对象自己的属性键。最简单的方法是使用
Object.keys

const result = await xml2js.parseStringPromise(someXML);

const keys = Object.keys(result);
现在,这将产生一个属性键数组,但是由于对象只有一个,我们可以只使用第一个键

const [rootKey] = Object.keys(result);
现在我们将使用这个rootKey来访问表示根元素的对象,而不管它的标记名如何

result[rootKey];
综合起来:

import xml2js from 'xml2js';

async function processXML() {
  const result = await xml2js.parseStringPromise(someXML);

  const [rootKey] = Object.keys(result);

  const attributes = result[rootKey].$;
}

谢谢你的详细解释。使用Object.keys适用于我的用例!