【问题标题】:XML Parser that works for both browser and Node.js?适用于浏览器和 Node.js 的 XML 解析器?
【发布时间】:2018-01-22 22:00:18
【问题描述】:

手头的问题:我在客户端和服务器端都有 XML,但是没有一致的方法来解析双方的 XML。

大多数浏览器都有 DOMParser。但是 Node.js 没有内置的 XML 解析器。有很多用于 XML 解析的 Node.js 模块,但我正在寻找一个对前端和后端都一致的 XML 解析器 API。换句话说,我正在寻找一个可以像这样在Node.js中使用的XML解析模块

const parser = require(magic_library);
const doc = parser.parseFromString(xml_string, 'application/xml');

在浏览器中也是这样

<script src="magic_library"></script>
<script>
  const doc = parser.parseFromString(xml_string, 'application/xml');
</script>

【问题讨论】:

  • 请参阅help center,特别是编号列表部分中的第 4 项。
  • 试试 fast-xml-parser

标签: javascript node.js xml browser node-modules


【解决方案1】:

试试fast-xml-parser

在 Node.js 中

var fastXmlParser = require('fast-xml-parser');
var jsonObj = fastXmlParser.parse(xmlData);

// when a tag has attributes 
var options = {
    attrPrefix : "@_",
    textNodeName : "#text",
    ignoreNonTextNodeAttr : true,
    ignoreTextNodeAttr : true,
    ignoreNameSpace : true,
    ignoreRootElement : false,
    textNodeConversion : true,
    textAttrConversion : false,
    arrayMode : false
};
if(fastXmlParser.validate(xmlData)=== true){//optional 
    var jsonObj = fastXmlParser.parse(xmlData,options);
}

//Intermediate obj 
var tObj = fastXmlParser.getTraversalObj(xmlData,options);
var jsonObj = fastXmlParser.convertToJson(tObj);

在浏览器中

var isValid = parser.validate(xmlData);
var jsonObj = parser.parse(xmlData);

【讨论】:

  • 但请注意限制部分:“解析器不检查 XML 是否有效”。 (而且我怀疑“有效”的意思是“格式正确”)。可悲的是,为 Javascript 找到一个符合标准的高质量 XML 解析器非常困难(我还没有成功)。而且我不会相信解析器具有良好的一致性水平,除非它根据 W3C 一致性测试 (w3.org/XML/Test/xmlconf-20020606.htm) 发布其结果
  • 这取决于用例。性能最高的解析器通常会为了速度而牺牲 xml 验证。
  • 我看了一下源码,这看起来像是一个业余爱好者下午写的东西。它甚至不处理诸如字符和实体引用之类的基本内容。作者似乎不知道 XML 世界中使用的术语“格式良好”和“有效”的正确含义。而且它不会生成 DOM 树,这肯定是 OP 要求中隐含的。
  • 重读那条评论:我所说的“业余”并不是指就编程技能而言的业余爱好者,我指的是对 XML 的了解相当有限的人。对不起,如果我另有暗示。
  • 如何将其导入浏览器?我正在使用快递。我只有一个标签吗? &lt;script src="../node_modules/fast-xml-parser"&gt;&lt;/script&gt;
【解决方案2】:

您可能想尝试 txml。它是目前最快的 xml 解析器,它可以在节点、浏览器和工作线程中工作。并且 API 非常干净:https://www.npmjs.com/package/txml

【讨论】:

    猜你喜欢
    • 2011-12-18
    • 2022-08-14
    • 2013-11-10
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 2017-11-28
    相关资源
    最近更新 更多