V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
yazoox
V2EX  ›  JavaScript

DOMParser 在解析 xml 的时候,如果含有&符号,会失败

  •  
  •   yazoox · 2022-02-15 09:23:30 +08:00 · 1880 次点击
    这是一个创建于 803 天前的主题,其中的信息可能已经有所发展或是发生改变。
    export function convertStringToDOM(strXml: string): Document {
      const parser = new DOMParser();
      const doc = parser.parseFromString(strXml, "application/xml");
      return doc;
    }
    

    这里的 strXml 比如,

    <test clsid="g16A07941-BC15-4D48-A880-9D5A211D5065" ID="g16A07941-BC15-4D48-A880-9D5A211D5066">
        <Db clsid="g16A07941-BC15-4D48-A880-9D5A211D5093" ID="ga92">
            <Prop propname="db1">/a/b/c/d</Prop>
            <Prop propname="db1">1 & 2</Prop>
        </Db>
    </test>
    
    

    最近需要读取一些文件,展示在网页上面。都是 xml 的数据,使用 Javascript 的 DOMParser 解析这些文件的时候,总是会失败。 debug 了一下发现,是因为这些 xml 的一些内容,比如上面的“1 & 2”里面含有 & 这个符号。只要有这个符号,读取就会失败。DOMParser 不能识别或者智能解析这个&符号么?

    大家有没有比较好的办法? xml 数据源这个没有办法,是客户数据。我们只能想办法读取出来。

    14 条回复    2022-02-15 20:11:37 +08:00
    chendy
        1
    chendy  
       2022-02-15 09:30:48 +08:00
    nitmali
        2
    nitmali  
       2022-02-15 09:31:19 +08:00
    转义:&amp;
    vanton
        3
    vanton  
       2022-02-15 09:43:49 +08:00   ❤️ 1
    这是用户错误,xml 语法不规范。
    对方开发人员有点偷懒。

    解析之前自己先 replace 。
    littleylv
        4
    littleylv  
       2022-02-15 09:44:31 +08:00   ❤️ 2
    本身 xml 就不应该包含 “&”、“<”,“>” 等特殊符号,生成 xml 字符串的写入 xml 文件的时候就应该转义掉。

    所以这里不是 DOMParser 的问题,是你自己 strXml 的问题。

    此贴终结。
    yazoox
        5
    yazoox  
    OP
       2022-02-15 09:45:12 +08:00
    @nitmali
    @chendy

    这么简单粗暴么?没有“温柔”一点的?
    ospider
        6
    ospider  
       2022-02-15 09:51:07 +08:00
    如楼上所说,本来就是对方开发人员的烂摊子,你还要啥优雅方法……快糙猛弄完就得了。
    jpyl0423
        7
    jpyl0423  
       2022-02-15 09:51:24 +08:00
    直接用 html 方式读取不就好了吗
    chendy
        8
    chendy  
       2022-02-15 09:51:38 +08:00
    @yazoox 没,因为数据本身就错了,于是用之前要先修复数据,修理的方法就是自己做转义……
    cweijan
        9
    cweijan  
       2022-02-15 10:00:40 +08:00
    在 idea 试了下, &的符号确实是非法的.. 你试下其他解析库支不支持, https://www.npmjs.com/search?q=xml
    nieyujiang
        10
    nieyujiang  
       2022-02-15 10:12:38 +08:00 via iPhone
    这还要什么优雅,只有魔法才能打败魔法
    sprite82
        11
    sprite82  
       2022-02-15 11:46:40 +08:00
    对方要么转义,要么 cdata 包起来,否则,只能是你来暴力替换处理
    BrettD
        12
    BrettD  
       2022-02-15 12:44:31 +08:00 via iPhone
    XML 含有&本来就不合规范。让客户改去。
    netnr
        13
    netnr  
       2022-02-15 12:53:08 +08:00
    根据 fast-xml-parser 打包的浏览器版本,https://ss.js.org/jsontoxml
    ragnaroks
        14
    ragnaroks  
       2022-02-15 20:11:37 +08:00
    XML 的标准是内容需要 [CDATA][/CDATA]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1505 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:02 · PVG 01:02 · LAX 10:02 · JFK 13:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.