Tag: xpath

XPath如何处理XML名称空间?

XPath如何处理XML名称空间? 如果我使用 /IntuitResponse/QueryResponse/Bill/Id parsing下面的XML文档,我得到0个节点。 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2016-10-14T10:48:39.109-07:00"> <QueryResponse startPosition="1" maxResults="79" totalCount="79"> <Bill domain="QBO" sparse="false"> <Id>=1</Id> </Bill> </QueryResponse> </IntuitResponse> 但是,我没有在XPath中指定名称空间(即http://schema.intuit.com/finance/v3不是path中每个标记的前缀)。 如果我没有明确地告诉XPath XPath如何知道我想要的Id ? 我想在这种情况下(因为只有一个名称空间),XPath可以完全忽略xmlns 。 但是,如果有多个命名空间,事情可能会变得丑陋。

使用Node.js遍历XML文档最快捷的方法?

从类似的问题,我发现了XPath ,它看起来非常快,但我不能用Node.js: > var xp = new XPathEvaluator(); ReferenceError: XPathEvaluator is not defined at repl:1:14 at REPLServer.self.eval (repl.js:110:21) at repl.js:249:20 at REPLServer.self.eval (repl.js:122:7) at Interface.<anonymous> (repl.js:239:12) at Interface.EventEmitter.emit (events.js:95:17) at Interface._onLine (readline.js:202:10) at Interface._line (readline.js:531:8) at Interface._ttyWrite (readline.js:760:14) at ReadStream.onkeypress (readline.js:99:10) 我可以以某种方式安装它作为一个模块? 还是有其他的select? 问题是我正在下载几个RSS提要总共约900条目。 我正在下载它们不到一秒钟,但用jQuery迭代每个元素 $(xml).find('entry').each(function() { }); …需要10-15秒,这是一个Web服务是不能接受的。 有什么build议么?

NodeJS xpath库是否支持XPath查询expression式?

我正在尝试使用NodeJS库执行一些XPath查询,但无法find我正在尝试做的任何文档或示例。 基本上,我有一个节点,有多个孩子,其中一些名为“stringProp”。 我试图抓住只有“名称”属性设置为“评论”的stringProp节点。 这是可能的xpath库吗? 现在我的代码,得到一个parsingexception,看起来像这样: var comment = xpath.select("./stringProp/[@name = 'comment']", children[i]); 这是试图在xpath库文档中模拟一个类似的命名空间操作: var node = xpath.select("//*[local-name(.)='title' and namespace-uri(.)='myns/']", doc)[0] 但是,库文档不会使用属性显示任何类似的示例。

使用xpath在xml中循环嵌套元素

我有以下xml.I要循环通过每个学生的课程。这可以通过nodejs的xpath js模块来完成吗? <students> <student> <name>George</name> <courses> <course> <coursename>Philosophy</coursename> </course> <course> <coursename>Literature</coursename> </course> </courses> </student> <student> <name>John</name> <courses> <course> <coursename>History</coursename> </course> <course> <coursename>Maths</coursename> </course> </courses> </student> </students>

XPath获取下一个项目

我刚开始使用XPATH,而且我有一些关于它的function的问题/它是否可以做我想做的事情。 我在我的XML文档中有以下结构: <root> <top id="1"> <item id="1"> <sub id="A"></sub> <sub id="B"></sub> <item> <item id="2"> <sub id="A"></sub> <sub id="B"></sub> <item> </top> <top id="2"> <item id="1"> <sub id="A"></sub> <sub id="B"></sub> <item> <item id="2"> <sub id="A"></sub> <sub id="B"></sub> <sub id="C"></sub> <item> </top> </root> 我有存储在一个variables中的CurrentTop,CurrentItem和CurrentSub。 var CurrentTop = "1", CurrentItem = "1", CurrentSub = "A"; 使用XPath查询,我希望能够select下一个Sub,不pipe它在文档中的位置,如果下一个Sub与CurrentItem不在同一个Item中,我也需要获取这些信息。 Top也一样 我正在使用Javascript。 我知道这可能需要在多个查询中完成。 […]

使用node.js中的XPathparsingHTML / XML

我试图编写一个XPath语句来获取表中的每一行的内容,但只有当每行的第二列未设置为“TBA”。 我正在closures这个页面的页面 。 我是使用XPath的新手。 我提出了以下的声明,我已经用一个在线的XPathtesting器成功地testing了(或者看起来成功了),但是一直无法弄清楚如何在node.js中应用它: //*[@id="body_column_left"]/div[4]/table/tbody/tr/[not(contains(./td[2], 'TBA'))] 这是我的尝试下面,我已经尝试了变化,但我不能得到它甚至validation为有效的XPath语句,结果我已经在不是非常有用的堆栈跟踪丢失: var fs = require('fs'); var xpath = require('xpath'); var parse5 = require('parse5'); var xmlser = require('xmlserializer'); var dom = require('xmldom').DOMParser; var request = require('request'); var getHTML = function (url, callback) { request(url, function (error, response, body) { if (!error && response.statusCode == 200) { return callback(body) // […]

如何通过节点js中的xpath获取属性值

给定XML <ValCredLookup> <ValCredName name="val-cred-api-cust"> <certificate thumbprint="12345"> <clientID id="1bbfea"> <Merchant-id>123456789</Merchant-id> </clientID> </certificate> </ValCredName> </ValCredLookup> 如何使用xpath通过属性值获取证书或客户端ID? 我曾尝试过这样的事情 doc = new xmldom().parseFromString(data, 'application/xml'); var xpath = require('xpath'); var valcredname = xpath.select("/ValCredLookup/ValCredName/@name='valcred-api-cust'", doc); 哪些工作,但如果我尝试 var valcredname = xpath.select("/ValCredLookup/ValCredName/@name='val-cred-api-cust'/certificate", doc); 这不起作用。 另外我如何引用xpath中的variables var vcname = 'valcred-api-cust'; var nodes = xpath.select("/ValCredLookup/ValCredName/@name=????, doc); 我真正需要做的是获取clientID下的元素,使用xpath属性名,指纹和id,这些都是variables。 喜欢这个 var vc = 'val-cred-api-cust'; var tp = […]

在node.js中使用XPath

我正在node.js中构build一个小文档parsing器。 为了testing,我有一个原始的HTML文件 ,通常在应用程序执行时从真实网站下载。 我想从Console.WriteLine的每个部分提取符合我的约束的第一个代码示例 – 它必须用C#编写。 要做到这一点,我有这样的XPath: //*[@id='System_Console_WriteLine_System_String_System_Object_System_Object_System_Object_']/parent::div/following-sibling::div/pre[position()>1]/code[contains(@class,'lang-csharp')] 如果我在线testingXPath ,我会得到预期的结果,这是在这个Gist 。 在我的node.js应用程序中,我使用xmldom和xpath来尝试parsing完全相同的信息: var exampleLookup = `//*[@id='System_Console_WriteLine_System_String_System_Object_System_Object_System_Object_']/parent::div/following-sibling::div/pre[position()>1]/code[contains(@class,'lang-csharp')]`; var doc = new dom().parseFromString(rawHtmlString, 'text/html'); var sampleNodes = xpath.select(exampleLookup,doc); 但是,这不会返回任何内容。 这里可能会发生什么?

使用PhantomJs,Nodejs和MySQL

有没有办法使用PhantomJS刮取数据,然后用nodejs XPath和DOMparsing结果,然后保存到MySQL? 我已经安装了PhantomJS核心和PhantomJS Node模块,但是试图从shell级别运行Node来执行scraper,然后设置cronjobs来按计划运行它们。

如何用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); […]