получить часть строки в массиве - PullRequest
0 голосов
/ 13 марта 2012

В настоящее время я использую nodejs, и у меня есть функция, которая возвращает тело (String), вот так:

 <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 (без кавычек) из этой строки и поместите ее в массив или список (в javascript), как здесь, я хотел бы иметь:

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

Я пробовал несколько способов, но это не работает, не могли бы вы помочьмне ?Спасибо!

Ответы [ 3 ]

2 голосов
/ 13 марта 2012

Использование xml2js:

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, там могут быть лучшие библиотеки,особенно если вам нужно разобрать большие документы.

1 голос
/ 13 марта 2012

Попробуйте использовать node-expat , (быстрая!) Потоковая библиотека XML-анализа. Предполагая, что ваш 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) для каждого куска данных, и он будет работать нормально.

1 голос
/ 13 марта 2012

Здесь это облегчит вашу жизнь.

Научитесь использовать парсер DOM, представленный в javascript http://www.w3schools.com/dom/default.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...