2017-02-14 21 views
0

私はいくつかのデータを取得するために、以下のサンプルXMLファイルを解析しようとしています。nodejs elementtree npm xml parsing

<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> 

私はすべてのプロファイル(でprofile1、プロファイル2 ...)、その後、各プロファイルのタイトルタグのために、私はそのテキストコンテンツを取得する必要がありますを取得する必要があり、このXMLファイルから:以下はXMLファイルです。私はこのようなsomehtingをachiveしようとしています。たとえば

for all profile in XML{ 
    get its attribute "id". 
    get its <title> tag's text content. 
} 

は、以下の期待される出力されます。

profile1 
text1 
profile2 
text2 // but in my code, it is always coming text1. I am not aware of, how to place [i] 

私は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]); 
} 

答えて

1

:ここに私のコードです

console.log(etree.findall('./Profile')[i].find('title').text); 

しかし、私も少しはこのような複数回.findall呼び出すことがないようにコードをリファクタリングします:

var profiles = etree.findall('./Profile'); 
 

 
for (var i = 0; i < profiles.length; i++) { 
 
\t var profile = profiles[i]; 
 

 
\t console.log(profile.get('id')); 
 
\t console.log(profile.find('title').text); 
 
}

この情報がお役に立てば幸いです。

+0

こんにちはアントニオ、応答のために感謝します。出来た。 :) –

+0

@HemantYadavあなたは大歓迎です:) –

+0

こんにちはAntonio、私はelementTreeモジュールでもう一つの問題に遭遇しました。下のリンクで尋ねられた問題のための良いnodejsモジュールをお勧めしますか?私は後で時間をかけて解析するためにさらに深く掘り下げる必要があるかもしれません。私はいつでも問題に遭遇するかもしれません。またはelemenTreeモジュールのための良いドキュメント。 http://stackoverflow.com/questions/42553153/nodejs-elementtree-npm-xml-parsing-and-merging –