2012-03-13 5 views
0

内の文字列の一部を取得し、私は体を返す機能を持ってこのような:(String)を私は現在nodejsを使用しています配列

<resourceDescriptors> 
<resourceDescriptor name="AllAccounts" wsType="reportUnit" uriString="/reports/samples/AllAccounts" isNew="false"> 
    <label><![CDATA[Accounts Report]]></label> 
    <description><![CDATA[All Accounts Report]]></description> 
    <creationDate>1328803684197</creationDate> 
    <resourceProperty name="PROP_RESOURCE_TYPE"> 
     <value><![CDATA[com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportUnit]]></value> 
    </resourceProperty> 
    <resourceProperty name="PROP_PARENT_FOLDER"> 
     <value><![CDATA[/reports/samples]]></value> 
    </resourceProperty> 
    <resourceProperty name="PROP_VERSION"> 
     <value><![CDATA[0]]></value> 
    </resourceProperty> 
    <resourceProperty name="PROP_RU_ALWAYS_PROPMT_CONTROLS"> 
     <value><![CDATA[false]]></value> 
    </resourceProperty> 
    <resourceProperty name="PROP_RU_CONTROLS_LAYOUT"> 
     <value><![CDATA[1]]></value> 
    </resourceProperty> 
</resourceDescriptor> 
<resourceDescriptor name="Cascading_multi_select_report" wsType="reportUnit" uriString="/reports/samples/Cascading_multi_select_report" isNew="false"> 
    <label><![CDATA[Cascading multi select example report]]></label> 
    <description><![CDATA[Example report with Cascading multi select input controls]]></description> 
    <creationDate>1328803684289</creationDate> 
    <resourceProperty name="PROP_RESOURCE_TYPE"> 
     <value><![CDATA[com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportUnit]]></value> 
    </resourceProperty> 
    <resourceProperty name="PROP_PARENT_FOLDER"> 
     <value><![CDATA[/reports/samples]]></value> 
    </resourceProperty> 
    <resourceProperty name="PROP_VERSION"> 
     <value><![CDATA[0]]></value> 
    </resourceProperty> 
    <resourceProperty name="PROP_RU_ALWAYS_PROPMT_CONTROLS"> 
     <value><![CDATA[true]]></value> 
    </resourceProperty> 
    <resourceProperty name="PROP_RU_CONTROLS_LAYOUT"> 
     <value><![CDATA[1]]></value> 
    </resourceProperty> 
</resourceDescriptor> 
       .... 
</resourceDescriptors> 

は、だから私はすべてのFIRSTを取得したいですこの文字列から名前(引用符なし)部分と配列またはリストに入れて(ジャバスクリプト)で、ここのように私が持っているしたいと思います:

list[0]=AllAccounts 
list[1]=Cascading_multi_select_report 

私はいくつかの方法を試してみましたが、それは働いていない、あなたの可能性助けて ? ありがとう!

+0

jQueryを使用すると便利かもしれません。[jQuery.parseXML()](http://api.jquery.com/jQuery.parseXML/) – Martin

答えて

2

で提供DOMパーサを使用することを学ぶ:

var xml2js = require('xml2js'), 
    parser = new xml2js.Parser(); 

parser.parseString(body, function(err, result) { 
    var names = result.resourceDescriptor.map(function(resourceDescriptor) { 
    return resourceDescriptor['@'].name; 
    }); 
    console.log(names); 
    // => [ 'AllAccounts', 'Cascading_multi_select_report' ] 
}); 

注:私はxml2jsとその慣れていないよ、そこより良いライブラリがあるかもしれません、特に大きな文書を解析する必要がある場合に便利です。

+0

WORKING great !!!!本当にありがとう! – Louis

1

ここで、これはあなたの人生を楽にします。

xml2jsを使用してJavaScriptの http://www.w3schools.com/dom/default.asp

+0

「名前」は有効です。 - 、_、数字、さらに多分かもしれません! :) – Michael

+0

ありがとう!まあ私はJqueryを使用していない、あなたは私に "forloop"バージョンを教えてくれますか?私は実際にはjavascriptに新しいです私はそれぞれの作業していない(それは文字と数字が可能です) – Louis

+0

新しいバージョンのTHanksが、 "kは宣言されていません"と言う – Louis

1

(高速!)ストリーミングXML解析ライブラリnode-expatを試してみてください。文字列として保存されているXML文書がある(または可能)と仮定:

var xp = require('node-expat'); 

function getResourceDescriptorNames(xmlStr) { 
    var names = [], parser = new xp.Parser('UTF-8'); 
    parser.on('startElement', function(name, attr) { 
    if (name === 'resourceDescriptor') names.push(attr.name); 
    }).parse(xmlStr); 
    return names; 
} 

getResourceDescriptorNames(myXmlString); 
// => ['AllAccounts', 'Cascading_multi_select_report'] 

注意をXMLドキュメントではなく、バッファの流れから来て、あなたがそれをバッファリングしたくない場合は、単にparser.parse(data)を呼び出すことができることデータの各チャンクに対して、それは正常に動作します。

+0

ええ、ありがとう、私はそれを試したい、私はちょうどこのモジュールをインストールする方法を捜している – Louis

関連する問題