存在命名空间指令时,错误解析xml

时间:2020-09-07 20:30:58

标签: node.js xml-parsing xmldom

我需要使用node.js读取多个XML文件。当根节点包含名称空间指令时,解析xml文件失败。删除名称空间指令时,所有指令都可以正常运行。我所有的文件都可以有不同的声明。如何解析XML,而忽略名称空间属性?我需要使用xPath来获取一些值。

我正在使用...

var fs = require('fs');
var xpath = require('xpath');
var dom   = require('xmldom').DOMParser;

var xml = fs.readFileSync('/test.xml', 'utf8').toString();
var doc = new dom().parseFromString(xml);
var id = xpath.select("/export/asset/id", doc);

console.log(id[0].firstChild.data);

XML文件

<export xmlns="some url" xmlns:xsi="some url" format="archive" version="2.4" xsi:schemaLocation="some url.xsd">
  <asset>
    <id>1445254514291</id>
    <name>test</name>
    <displayName />
    <origin>demo</origin>
  </asset>
<export>

1 个答案:

答案 0 :(得分:0)

通常来说,考虑名称空间是可取的,但是如果您必须处理太多的名称空间,则要完全避免使用它们,一种避免使用名称空间的方法是使用xpath和有些复杂但有效的local-name()函数。

所以我会改变

var id = xpath.select("/export/asset/id", doc);

var id = xpath.select("//*[local-name()='export']//*[local-name()='asset']//*[local-name()='id']", doc);

在问题中带有示例xml的情况下,应输出:

"1445254514291"
相关问题