通过在其中排除少量标签来获取两个标签之间的所有内容

时间:2013-03-25 22:53:14

标签: javascript xml regex

我想通过排除该内容中的几个标签来检索xml的两个标签之间的所有内容。这是什么常规表现?例如,在下面的xml中,我想通过排除<ASObject mappedClass="com.taliantsoftware.claims.indemnity.PayeeAllocationDTO" encoding="0">标记来提取</ASObject><updated tagClass="boolean">false</updated> and <voided tagClass="boolean">false</voided>之间的所有内容。

<ASObject mappedClass="com.taliantsoftware.claims.indemnity.PayeeAllocationDTO" encoding="0">
    <payeecustomerid tagClass="double">2004570.0</payeecustomerid>
    <amount tagClass="double">2131.2</amount>
    <new tagClass="boolean">true</new>
    <percent tagClass="double">100.0</percent>
    <updated tagClass="boolean">false</updated>
    <voided tagClass="boolean">false</voided>
    <remainderindicator tagClass="boolean">true</remainderindicator>
    <detailamountstatustypecode tagClass="String">pnd</detailamountstatustypecode>
    <primary tagClass="boolean">true</primary>
    <mailtoindicator tagClass="boolean">true</mailtoindicator>
    <checkgroupnumber tagClass="double">1.0</checkgroupnumber>
    <detailamountstatustypename tagClass="String">Pending</detailamountstatustypename>
    </ASObject>

1 个答案:

答案 0 :(得分:0)

如果您只想删除更新的和无效的标签,这个正则表达式应该可以工作:

var clean_xml = xml.replace(/<(updated|voided).*</\1>/,'')

注意:

  • 您可以添加其他标签,但不能使用此正则表达式进行自动关闭
  • xml解析器更可靠

修改

如果必须首先捕获ASObject标记,则正则表达式不是很漂亮。使用递归模式可能更好。

/(<ASObject.*)<(updated|voided).*<\/\2>(.*)<(updated|voided).*<\/\4>(.*<\/ASObject>)/

然后连接结果数组的索引1,3,5。