#xml #meteor
#xml #meteor
Вопрос:
В настоящее время я пытаюсь проанализировать XML через meteor с помощью xml2js и вставить его в 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 в качестве выходных данных?Заранее благодарю вас
Ответ №1:
Согласно документации, вам нужно передать обратный вызов xml2js.parseString
, чтобы получить фактическое значение:
xml2js.parseString(Assets.getText('iati.xml'), function(err, res) {
Iati.insert({
test: res,
});
});
Комментарии:
1. обратный вызов может потребоваться выполнить по оптоволокну. Потребуется что-то вроде
Meteor.bindEnvironment
илиMeteor._runAsync
или вручнуюFibers(function() {...}).run()
, поскольку вставка представляет собой код meteor2. @hubertOG пример кода в ваших ответах дает точно такой же результат.
3. @Akshat что именно ты предлагаешь :)>
4. @Akshat: хорошая идея, я забыл, что мы на стороне сервера. Тем не менее, если бы проблема была с волокнами, это вызвало бы исключение, а не изменило результат, верно?
5. @Jaspermid: при ближайшем рассмотрении вы уверены, что полученные вами результаты не те, которые вы должны получать? Результат выглядит как определение узла XML.