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 数据源这个没有办法,是客户数据。我们只能想办法读取出来。
1
chendy 2022-02-15 09:30:48 +08:00
|
2
nitmali 2022-02-15 09:31:19 +08:00
转义:&
|
3
vanton 2022-02-15 09:43:49 +08:00 1
这是用户错误,xml 语法不规范。
对方开发人员有点偷懒。 解析之前自己先 replace 。 |
4
littleylv 2022-02-15 09:44:31 +08:00 2
本身 xml 就不应该包含 “&”、“<”,“>” 等特殊符号,生成 xml 字符串的写入 xml 文件的时候就应该转义掉。
所以这里不是 DOMParser 的问题,是你自己 strXml 的问题。 此贴终结。 |
6
ospider 2022-02-15 09:51:07 +08:00
如楼上所说,本来就是对方开发人员的烂摊子,你还要啥优雅方法……快糙猛弄完就得了。
|
7
jpyl0423 2022-02-15 09:51:24 +08:00
直接用 html 方式读取不就好了吗
|
9
cweijan 2022-02-15 10:00:40 +08:00
在 idea 试了下, &的符号确实是非法的.. 你试下其他解析库支不支持, https://www.npmjs.com/search?q=xml
|
10
nieyujiang 2022-02-15 10:12:38 +08:00 via iPhone
这还要什么优雅,只有魔法才能打败魔法
|
11
sprite82 2022-02-15 11:46:40 +08:00
对方要么转义,要么 cdata 包起来,否则,只能是你来暴力替换处理
|
12
BrettD 2022-02-15 12:44:31 +08:00 via iPhone
XML 含有&本来就不合规范。让客户改去。
|
13
netnr 2022-02-15 12:53:08 +08:00
根据 fast-xml-parser 打包的浏览器版本,https://ss.js.org/jsontoxml
|
14
ragnaroks 2022-02-15 20:11:37 +08:00
XML 的标准是内容需要 [CDATA][/CDATA]
|