【问题标题】:Meteor: Parsing XML through xml2js returns bogus objectMeteor:通过 xml2js 解析 XML 返回虚假对象
【发布时间】:2014-08-24 05:29:17
【问题描述】:

我目前正在尝试使用 xml2js 通过流星解析 XML 并将其插入到 Mongodb 中。我使用以下代码在 server/fixtures.js 中执行此操作:

Iati.insert({
    test: xml2js.parseString(Assets.getText('iati.xml'))
})

Xml2js 似乎确实转换了一些东西,但输出似乎很荒谬,即具有以下属性的对象:

test: Object
ENTITIES: Object
attribList: Array[0]
attribName: ""
attribValue: ""
bufferCheckPosition: 65536
c: ""
cdata: ""
closed: false
closedRoot: false
column: 0
comment: ""
doctype: ""
entity: ""
error: null
line: 0
looseCase: "toUpperCase"
noscript: true
opt: Object
position: 0
procInstBody: ""
procInstName: ""
q: ""
sawRoot: false
script: ""
sgmlDecl: ""
startTagPosition: 9347
state: 0
strict: true
tag: null
tagName: ""
tags: Array[0]
textNode: ""
trackPosition: true
__proto__: Object
__proto__: Object

我应该如何更改我的代码以获取实际的 XML 作为输出?提前致谢

【问题讨论】:

    标签: xml meteor


    【解决方案1】:

    根据the documentation,需要通过回调xml2js.parseString获取实际值:

    xml2js.parseString(Assets.getText('iati.xml'), function(err, res) {
      Iati.insert({
        test: res,
      });
    });
    

    【讨论】:

    • 回调可能需要在光纤中运行。因为插入是流星代码,所以需要Meteor.bindEnvironmentMeteor._runAsync 或手册Fibers(function() {...}).run() 之类的东西
    • @hubertOG 您答案中的示例代码给出了完全相同的结果。
    • @Akshat 你到底在暗示什么 :)>
    • @Akshat:好电话,我忘了我们在服务器端。不过,如果问题出在 Fibers 上,它会引发异常而不是改变结果,对吧?
    • @Jaspermid:仔细检查后,你确定你得到的结果不是你应该得到的吗?输出看起来像一个 XML 节点定义。
    猜你喜欢
    • 2015-04-18
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 2014-08-30
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多