首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取数组中字符串的一部分

问获取数组中字符串的一部分
EN

Stack Overflow用户
提问于 2012-03-13 14:24:54
回答 3查看 218关注 0票数 0

我目前正在使用nodejs,并且我有一个函数返回一个body (String),如下所示:

代码语言:javascript
复制
 <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 name部分(没有引号),并将其放入一个数组或一个列表(在javascript中),就像这里我想要的那样:

代码语言:javascript
复制
list[0]=AllAccounts
list[1]=Cascading_multi_select_report

我试过几种方法,但不管用,你能帮我一下吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-13 15:06:17

使用xml2js

代码语言:javascript
复制
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,可能会有更好的库,特别是当您需要解析大型文档时。

票数 2
EN

Stack Overflow用户

发布于 2012-03-13 14:34:09

在这里,这会让你的生活更轻松。

学习使用javascript http://www.w3schools.com/dom/default.asp中提供的DOM解析器

票数 1
EN

Stack Overflow用户

发布于 2012-03-13 15:07:06

尝试使用节点-外派,a(快速!)流XML解析库。假设XML文档作为字符串存储(或可以存储):

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9685975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档