首页 > 解决方案 > 如何解析 xml 元素的内容,包括元素标签

问题描述

在一个 XML 文件中,我试图解析一个元素的内容,包括其他元素的标签,而不仅仅是文本。我首先尝试用正则表达式来做,但在某处读到这是不可能或非常困难的。后来我尝试使用 DOMParser,但一直无法正确使用。XML 文件如下所示:

<element1>
  <element2>
    ABC
  </element2>
  <element3>
    DEF
  </element3>
</element1>

我想要的输出是:

  <element2>
    ABC
  </element2>
  <element3>
    DEF
  </element3>

我正在尝试在 Javascript 中执行此操作,我的代码现在如下所示:

f = file.xml;
const content = fs.ReadFileSync(f, 'utf-8');
parser = new DOMParser();
xmlDoc= new parser().parseFromString(content, "text/xml");
result = xmlDoc.getElementsByTagName("element1")[0].childNodes[0].nodeValue;
return result;

我知道这只会返回 element1 中的文本,并且没有,但我不知道正确的代码是什么。

提前致谢!

标签: javascriptxmlparsing

解决方案


如果您都想解析 XML 并将某些节点序列化回字符串,那么这些天您可以在客户端 JavaScript 平台以及 Node.js 上使用 Saxon-JS 和 XPath 3.1:

var SaxonJS = require("saxon-js")

const content = `<element1>
  <element2>
    ABC
  </element2>
  <element3>
    DEF
  </element3>
</element1>`;

const xmlDoc = SaxonJS.XPath.evaluate('parse-xml($content)', [], { params : { content : content } });

var result = SaxonJS.XPath.evaluate('serialize(/element1/node())', xmlDoc);

console.log(result);

    const content = `<element1>
      <element2>
        ABC
      </element2>
      <element3>
        DEF
      </element3>
    </element1>`;
    
    const xmlDoc = SaxonJS.XPath.evaluate('parse-xml($content)', [], { params : { content : content } });
    
    var result = SaxonJS.XPath.evaluate('serialize(/element1/node())', xmlDoc);
    
    console.log(result);
<script src="https://www.saxonica.com/saxon-js/documentation/SaxonJS/SaxonJS2.rt.js"></script>


推荐阅读