我需要使用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>
答案 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"