javascript - 如何解析 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 中的文本,并且没有,但我不知道正确的代码是什么。
提前致谢!
解决方案
如果您都想解析 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>
推荐阅读
- mysql - 如何在保留数据库结构的同时从 MySQL 中的任何数据库中删除所有数据?
- angular - Angular - FormGroup - setValue 方法忽略特定的字符串值
- python - 环境变量返回的值与设置的值不同。我如何解决它?
- amazon-web-services - 在 CloudFront 中从 HTTP 重定向到 HTTPS
- azure - 将 ARM 模板替换为 Terraform 并使用 Visual Studio 进行部署
- reactjs - How to design a react-spring animation for one element in a group transition?
- cpu - Address in Program Counter Register
- c# - Initialize Component Function not working and btnstop not working
- php - Web site cannot handle more than 50 concurrent visitors, what is wrong?
- lua - 尝试使用 http 制作新的 github repos 文件