首页 > 解决方案 > 使用正则表达式从 XML 中提取字符串

问题描述

我有 xml 作为文本。

我需要提取标签之间的字符串“20”:

<ans:sequencialTransacao>2020</ans:sequencialTransacao>

我已经尝试了下面的脚本,但它不起作用。

const matches = this.codeXML.matchAll(
        /<ans:sequencialTransacao> (.*?) <\/ans:sequencialTransacao>/gm
      );
console.log(Array.from(matches, (x) => x[1])); 

//XML

<ans:identificacaoTransacao>
     <ans:tipoTransacao>ENVIO_LOTE_GUIAS</ans:tipoTransacao>
     <ans:sequencialTransacao>20</ans:sequencialTransacao>
     <ans:dataRegistroTransacao>2020-07-13</ans:dataRegistroTransacao>
     <ans:horaRegistroTransacao>20:48:28</ans:horaRegistroTransacao>
</ans:identificacaoTransacao>

标签: javascriptregexxml

解决方案


如果你需要一个快速而肮脏的解决方案,试试这个:

var xml = `<ans:identificacaoTransacao>
      <ans:tipoTransacao>ENVIO_LOTE_GUIAS</ans:tipoTransacao>
      <ans:sequencialTransacao>20</ans:sequencialTransacao>
      <ans:dataRegistroTransacao>2020-07-13</ans:dataRegistroTransacao>
      <ans:horaRegistroTransacao>20:48:28</ans:horaRegistroTransacao>
 </ans:identificacaoTransacao>`

xml.split("<ans:sequencialTransacao>")[1].split("<")[0]; // Returns "20"

否则,请查看xml2json


新解决方案(更干净):

function getXMLValue(tagName, xmlStr) {
    var tagValue = xmlStr.substring(
        xmlStr.lastIndexOf(tagName) + tagName.length,
        xmlStr.lastIndexOf(tagName.replace("<", "</"))
    );
    return tagValue;
}

用法:

var xml = `<ans:identificacaoTransacao>
      <ans:tipoTransacao>ENVIO_LOTE_GUIAS</ans:tipoTransacao>
      <ans:sequencialTransacao>20</ans:sequencialTransacao>
      <ans:dataRegistroTransacao>2020-07-13</ans:dataRegistroTransacao>
      <ans:horaRegistroTransacao>20:48:28</ans:horaRegistroTransacao>
 </ans:identificacaoTransacao>`;

getXMLValue("<ans:sequencialTransacao>", xml); // Returns "20"

推荐阅读