Tag: xml

如何使用libxmljs处理子节点(Node.js)

当我尝试使用libxmljsparsing以下xml时,我感到困惑: <?xml version =“1.0”encoding =“UTF-8”?> <结果集> <结果> <标题>标题1 </标题> <Summary> Summary 1 </ Summary> </结果> <结果> <标题>标题2 </标题> <Summary> Summary 2 </ Summary> </结果> </结果集> 我试过下面的代码: var libxmljs = require("libxmljs"); var xmlDoc = libxmljs.parseXmlFile("sample.xml"); xmlDoc.root().childNodes().length; // 5 我认为第三行的length属性应该是2,因为有2个Result节点,它们是根节点的子节点。 顺便说一下,我检查了每个元素,如: xmlDoc.root().childNodes()[0].get("Title").text(); // TypeError: Cannot call method 'text' of undefined xmlDoc.root().childNodes()[1].get("Title").text(); // Title 1 xmlDoc.root().childNodes()[2].get("Title").text(); // TypeError: […]

Node.js中的XML(使用Javascript)

我有模拟XML数据存储在硬盘(称为simmedData.xml)。 我还通过Web端点( http://localhost:8079/realData )获得了“真实”数据(“真实”数据是dynamic的)。 XML文档的格式完全相同,但我想将它们合并到http://localhost:8080/mergedData一个可用端点中。 我想使用node.js来承载mergedData端点 – 是否有一个简单的方法来合并这些XML文件在一起请求mergedData时? 例如: simmedData.xml <site:Tracks xmlns:site='http://mysite/site'> <site:track id='1' latitude='37.82091918923291' longitude='128.87375778822812' altitude='9753.6005859375' bearing='10.542624087704585' speedInKnots='454.6067199707031' /> <site:track id='2' latitude='37.45048387959727' longitude='129.49111126654887' altitude='9144.0' bearing='190.90400586790983' speedInKnots='436.89837646484375' /> </site:Tracks> HTTP://本地主机:8079 / realData <site:Tracks xmlns:site='http://mysite/site'> <site:track id='1001' latitude='39.82093291' longitude='128.87375722812' altitude='9753.60375' bearing='10.542704585' speedInKnots='454.6707031' /> <site:track id='1002' latitude='39.387959727' longitude='129.4126654887' altitude='9144.0' bearing='90.90790983' speedInKnots='436.8984375' /> <site:track id='1003' latitude='40.82093291' longitude='138.87375722812' altitude='9753.5' […]

jQuery不能访问java web服务

我正在尝试为我们的web服务编写一个简单的“概念validation”前端。 webservice是一个返回在tomcat中运行的简单xml的java webapp。 前端由一些简单的HTML页面和一些jQuery的function组成。 我在我的本地机器上开发页面,而Web服务在我们的一台服务器上运行。 基本上这是我做的: var url = "http://ourserver.com:51088/service/action/?param=123"; $.get(url,function(data,status) { alert("Data: " + data + "\nStatus: " + status); }); 当我把url放在Firefox地址栏中时,我得到了xml。 当我运行jquery代码的时候,Firebug显示了生成的xml,但是这个警告从来没有显示出来。 考虑到这可能是一个跨浏览器的脚本问题,我写了一个小的node.js代理服务器,通过任何本地主机:51088 /pathourserver.com:51088/path。 所以我改变了url var var url = "http://localhost:51088/service/action/?param=123"; 同样,在浏览器中testing这个URL会导致xml。 所以node.js代理服务器工作正常。 当我在Firebug中运行jQuery代码时,我现在一直得到Reload the page to get source for: http://localhost:51088/….. 我现在亏本了 更新:阅读更多后,我改变了jQuery代码: $.ajax( { type: "GET", contentType: "application/xml", url: url, datatype: "text xml", […]

如何用node.js中的XPath修改xmldom中的DOM?

我正在尝试改变node.js中的DOM结构。 我可以加载XMLstring,并用xmldom( https://github.com/jindw/xmldom )中的本地方法修改它,但是当我加载XPath( https://github.com/goto100/xpath )并尝试通过该select器改变DOM,它不起作用。 还有另一种方法可以做到这一点吗? 要求是: 必须在浏览器和服务器端都工作(纯js?) 不能使用eval或其他代码执行的东西(为了安全) 示例代码来显示我今天如何尝试,也许我只是想念一些基本的东西? var xpath = require('xpath'), dom = require('xmldom').DOMParser; var xml = '<!DOCTYPE html><html><head><title>blah</title></head><body id="test">blubb</body></html>'; var doc = new dom().parseFromString(xml); var bodyByXpath = xpath.select('//*[@id = "test"]', doc); var bodyById = doc.getElementById('test'); var h1 = doc.createElement('h1').appendChild(doc.createTextNode('title')); // Works fine 🙂 bodyById.appendChild(h1); // Does not work 🙁 bodyByXpath.appendChild(h1); […]

尝试通过节点调用National Rail SOAP API时发生TypeError

我正在尝试使用node-soap访问National Rail API。 文档在这里: https : //lite.realtime.nationalrail.co.uk/OpenLDBWS/ 我是SOAP的新手,所以这可能不是API的问题。 我正在得到一个types错误,无论我尝试… TypeError:无法读取未定义的属性“Body” 以下是我用来尝试拨打电话的代码: var soap = require('soap'); var url = 'https://lite.realtime.nationalrail.co.uk/OpenLDBWS/wsdl.aspx?ver=2014-02-20'; var soapHeader = '<com:AccessToken>MY_TOKEN</com:AccessToken>'; soap.createClient(url, function(err, client){ var args = { numRows : 10, crs : 'LAN' }; client.addSoapHeader(soapHeader); client.GetDepartureBoard(args, function(err, result){ if(err){ console.log('error!'); throw err; } console.log(result); }); }); 使用节点肥皂我也可以得到请求的信封,这是内容: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://thalesgroup.com/RTTI/2014-02-20/ldb/" xmlns:tok="http://thalesgroup.com/RTTI/2013-11-28/Token/types" […]

marklogic用node-client-api保存xml文档?

我似乎无法将xml文档保存到marklogic与它的node-client-api。 我曾经使用下面的代码来尝试保存一个虚拟的XML文档 var marklogic = require('marklogic'); var my = require('../db/env.js'); var db = marklogic.createDatabaseClient(my.connInfo); console.log("Write a single dummy xml document"); db.documents.write( { uri: '/collegiate/testxml.xml', contentType: 'application/xml', content: '<entry-list><entry id="horror"></entry></entry-list>' }) 然后我使用下面的代码来检索它: var marklogic = require('marklogic'); var my = require('../db/env.js'); var db = marklogic.createDatabaseClient(my.connInfo); console.log("Read a single xml document"); db.documents.read('/collegiate/testxml.xml') .result().then(function(document) { //console.log('\nURI: ' + document.uri); […]

用中文字符向Microsoft Translator API发布XML会引发反序列化exception

我正在尝试使用Microsoft Translator API将中文(简体)翻译成英文。 一些要求 我必须使用HTTP方法POST ,而不是使用查询string的GET ,因为我的查询超过了微软的URI限制的15,845个字符(请注意,即使在中文字符的情况下使用less于10,000个字符的限制,是查询string必须进行URL编码,这会显着增加长度,但是在确定字符数之前由Microsoft解码。 唯一允许POST的翻译HTTP方法是TranslateArrayMethod ,例如TranslateMethod只允许GET 。 不幸的是, TranslateArrayMethod只接受一个XML文档,所以我必须使用XML。 以下是我发送的XML文档的示例: <TranslateArrayRequest> <AppId/> <From>es</From> <Options> <ContentType xmlns="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2">text/plain</ContentType> </Options> <Texts> <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <![CDATA[Hola]]> </string> </Texts> <To>en</To> </TranslateArrayRequest> 这工作正常,结果是: <ArrayOfTranslateArrayResponse xmlns="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <TranslateArrayResponse> <From>es</From> <OriginalTextSentenceLengths xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <a:int>4</a:int> </OriginalTextSentenceLengths> <TranslatedText>Hello</TranslatedText> <TranslatedTextSentenceLengths xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <a:int>5</a:int> </TranslatedTextSentenceLengths> </TranslateArrayResponse> </ArrayOfTranslateArrayResponse> 但是,如果我添加任何中文字符,如下所示: <TranslateArrayRequest> <AppId/> <From>zh-CHS</From> <Options> <ContentType xmlns="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2">text/plain</ContentType> </Options> <Texts> <string […]

节点肥皂:如何创build具有特定属性的复杂消息?

这是我需要发送给wsdl的消息: <?xml version="1.0" encoding="UTF-8" ?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://WSDLPROVIDER" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:enqueue> <domain xsi:type="xsd:string">STH</domain> <messageBodies SOAP-ENC:arrayType="xsd:string[1]" xsi:type="SOAP-ENC:Array"> <item xsi:type="xsd:string">STHE</item> </messageBodies> <recipientNumbers SOAP-ENC:arrayType="xsd:string[2]" xsi:type="SOAP-ENC:Array"> <item xsi:type="xsd:string">09xxxxxxxx</item> <item xsi:type="xsd:string">09xxxxxxxx</item> </recipientNumbers> <senderNumbers SOAP-ENC:arrayType="xsd:string[1]" xsi:type="SOAP-ENC:Array"> <item xsi:type="xsd:string">3000xxxxx</item> </senderNumbers> <encodings xsi:nil="true" xsi:type="SOAP-ENC:Array" /> <udhs xsi:nil="true" xsi:type="SOAP-ENC:Array" /> <messageClasses xsi:nil="true" xsi:type="SOAP-ENC:Array" /> <priorities xsi:type="SOAP-ENC:Array" /> <checkingMessageIds SOAP-ENC:arrayType="xsd:long[2]" xsi:type="SOAP-ENC:Array"> <item […]

如何在没有string比较的情况下快速在node.js文件中附加节点

这里提出了一个解决scheme: 如何附加到文件的某一行? 我在这里复制解决scheme以供参考 var fs = require('fs'); var xmlFile; fs.readFile('someFile.xml', function (err, data) { if (err) throw err; xmlFile = data; var newXmlFile = xmlFile.replace('</xml>', '') + 'Content' + '</xml>'; fs.writeFile('someFile.xml', newXmlFile, function (err) { if (err) throw err; console.log('Done!'); }); }); 但是,上面的解决scheme需要string匹配'</xml>'string。 如果我们知道文件的最后一行总是'</xml>' ,那么有没有办法通过消除string比较来加速代码? 有没有另一种更有效的方法来完成这项任务?

使用Node JS从嵌套的XML中提取值

我在以XML为input的节点中编写REST服务,但是当我parsing它时,只显示第一级节点,嵌套的节点显示为对象。 我无法对要读取的XML元素进行硬编码,因为按照规范有可选元素,所以它必须是dynamic的。 我正在使用body-parser-xml来parsingXML。 var express = require('express'), bodyParser = require('body-parser'); require('body-parser-xml')(bodyParser); //var xmlparser = require('express-xml-bodyparser'); var app = express(); app.use(bodyParser.xml({ limit: '1MB', // Reject payload bigger than 1 MB xmlParseOptions: { normalize: true, // Trim whitespace inside text nodes normalizeTags: true, // Transform tags to lowercase explicitArray: false, // Only put nodes in array if […]