Javascript nodejs元素树npm xml解析

Javascript nodejs元素树npm xml解析,javascript,node.js,xml,parsing,elementtree,Javascript,Node.js,Xml,Parsing,Elementtree,我试图解析下面的示例XML文件,以便从中获取一些数据。以下是XML文件: <Benchmark xmlns="http://checklists.nist.gov/xccdf/1.1" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" id="SAP-HANA" resolved="1" xml:lang="en-US"> <status date="2016-03-17">draft</status> <

我试图解析下面的示例XML文件,以便从中获取一些数据。以下是XML文件:

<Benchmark xmlns="http://checklists.nist.gov/xccdf/1.1" xmlns:xsi="www.w3.org/2001/XMLSchema-instance" id="SAP-HANA" resolved="1" xml:lang="en-US">
 <status date="2016-03-17">draft</status>
 <title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">Guide to the Secure Configuration of SAP HANA</title>
 <version>0.1.28</version>

 <Profile id="profile1">
    <title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">text1</title>
    <select idref="This is rule 1" selected="true"/>
    <set-value idref="ssfs_master_key_timeout">20</set-value>
 </Profile> 

 <Profile id="profile2">
    <title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">text2</title>
    <select idref="this is rule1" selected="true"/>
    <select idref="this is rule1" selected="true"/>
    <select idref="this is rule1" selected="true"/>
 </Profile>
</Benchmark>
我可以获取id,但无法获取其标记的文本内容。以下是我的代码:

var fs = require('fs'); 
var et = require('elementtree'); 
var XML = et.XML;
var ElementTree = et.ElementTree;
var element = et.Element;
var subElement = et.SubElement;

var data, etree;

data = fs.readFileSync('my.xml').toString();
etree = et.parse(data);
var length = etree.findall('./Profile').length;
for (var i = 0; i < length; i++) {
    console.log(etree.findall('./Profile')[i].get('id'));
    console.log(etree.findtext('./Profile/title'));  // dont know, where to place [i]

//  var profile = etree.findall('./Profile')[i].get('id');
//  console.log(etree.findtext('./Profile'[@id=’profile’]'/title'));

    //console.log(etree.findall('./Profile'[i]'/title'));
    //console.log(list[i]);
}
var fs=require('fs');
var et=require('elementtree');
var XML=et.XML;
var ElementTree=et.ElementTree;
var元素=等元素;
var子元素=et子元素;
var数据,etree;
data=fs.readFileSync('my.xml').toString();
etree=et.parse(数据);
变量长度=etree.findall('./Profile').length;
对于(变量i=0;i
您可以获得如下文本:

for all profile in XML{
    get its attribute "id".
    get its <title> tag's text content.
}
console.log(etree.findall('./Profile')[i].find('title').text);
但我也会对代码进行重构,使其不调用.findall多次,如下所示:

for all profile in XML{
    get its attribute "id".
    get its <title> tag's text content.
}
console.log(etree.findall('./Profile')[i].find('title').text);
var profiles=etree.findall('./Profile');
对于(变量i=0;i}
您可以获得如下文本:

for all profile in XML{
    get its attribute "id".
    get its <title> tag's text content.
}
console.log(etree.findall('./Profile')[i].find('title').text);
但我也会对代码进行重构,使其不调用.findall多次,如下所示:

for all profile in XML{
    get its attribute "id".
    get its <title> tag's text content.
}
console.log(etree.findall('./Profile')[i].find('title').text);
var profiles=etree.findall('./Profile');
对于(变量i=0;i}
Hi Antonio,我在elementTree模块上又遇到了一个问题。你能为下面的链接中的问题推荐任何好的nodejs模块吗。稍后我可能需要进一步深入研究xml解析。我随时可能再次遇到问题。或任何有关elemenTree模块的良好文档@HemantYadav回答了这个问题。我会选择xml2js。我自己没有试过,但在GitHub它就像是2.3k(而elementtree只有88颗星)的星星。嗨@Antonio Narkevich,这有什么帮助吗。嗨,Antonio,我在elementTree模块上又遇到了一个问题。你能为下面的链接中的问题推荐任何好的nodejs模块吗。稍后我可能需要进一步深入研究xml解析。我随时可能再次遇到问题。或任何有关elemenTree模块的良好文档@HemantYadav回答了这个问题。我会选择xml2js。我自己没有试过,但在GitHub它就像是2.3k(而elementtree只有88颗星)的星星。嗨@Antonio Narkevich,这有什么帮助吗。