我是 Parse.com 云代码的新手,主要是一名 iOS 开发人员。在 iOS 中,我使用 Hpple,这是一个用于解析 xml 文档的 xPath 求值器。我现在需要在我的云代码中执行此操作。我想知道 Javascript SDK 中是否已经有一种方法可以使用像
这样的表达式来做到这一点xpath 表达式:
//day[@name='monday']/meal[@name='LUNCH']/counter[@name='Deli']/dish/name
从这个 url 评估这个 xml:
http://64.182.231.116/~spencerf/union_college/Upperclass_Sample_Menu.xml
这将返回字符串“Made to Order Deli Core”、“Caprese Panini Biggie Sandwich”。有没有办法在 Javascript SDK 中执行此操作,或者是否有任何模块可以安装到可以像这样评估 xml 的解析云代码中?
到目前为止我试过的代码是这样的:
Parse.Cloud.define("next", function(request, response) {
var xmlreader = require('cloud/xmlreader.js');
Parse.Cloud.httpRequest({
url: 'http://64.182.231.116/~spencerf/union_college/Upperclass_Sample_Menu.xml',
success: function(httpResponse) {
//console.log(httpResponse.text);
var someXml = httpResponse.text;
xmlreader.read(someXml, function (err, res){
if(err) return console.log(err);
// use .text() to get the content of a node:
console.log( res.dish.text() );
});
},
error: function(httpResponse) {
console.error('Request failed with response code ' + httpResponse.status);
}
});
});
我可以将数据保存在我的变量 someXml 中,我认为它被保存为一个字符串,这可能会干扰解析,因为我无法解析它。我正在使用 xmlReader 来解析它 (https://www.npmjs.org/package/xmlreader) 有它的工作原理和解析语法的链接。我在解析它时遇到了麻烦。理想情况下,我只想在我使用此代码的地方用 xPath 解析它:
var getElementByXpath = function (path) {
return someXml.evaluate(path, someXml, null, 2, null).stringValue;
};
console.log(getElementByXpath("//day[@name='monday']/meal[@name='LUNCH']/counter[@name='Deli']/dish/name"));
但这不起作用,它给了我这个错误
has no method 'evaluate'
at getElementByXpath (main.js:131:20)
at Object.Parse.Cloud.httpRequest.success (main.js:134:17)
at Object.<anonymous> (<anonymous>:571:19)
在我提供的链接上,我想获取星期一/午餐下的所有名称节点
最佳答案
关于上述评论(用户 dirkk)中提到的可能限制,不确定这在 Parse.com 中是否可行,但也许这可以工作/帮助:
var getElementByXpath = function (path) {
return document.evaluate(path, document, null, 2, null).stringValue;
};
alert(getElementByXpath("//book/title"));
工作演示:Javascript XPath
更新:以上通过 XPath 使用 Javascript 进行 XML 解析已包含在 OP 中。虽然它可以工作,但下一个问题是通过 URL 获取 XML 文件。 OP 不喜欢使用 Ajax/jQuery 的建议解决方案。建议改用 Parse.Cloud.httpRequest。在此处查找引用:Cloud Code Response Object .此外,此处提到的解决方案存在类似问题:Unable to parse data from an xml file in the Parse Cloud using xmlreader in express app在这里:How to make a REST GET request (with authentication) and parse the result in javascript?
在这里看看可能有用:Parse Cloud Code
更新:由于问题已经调整,现在测试 Parse Cloud xmlreader 以从 XML 文件中获取星期一午餐名称。由于 xmlreader 的文档不提供直接通过属性值访问节点属性,因此以下解决方案虽然由于嵌套的 for 循环而看起来很难看,但可以工作:
xmlreader.read(someXml, function (err, res){
if(err) return console.log(err);
for(var i = 0; i < res.day.count(); i++){
if (res.day(i).text()) == "monday")
{
for(var j = 0; j < res.day(i).meal.count(); j++){
if (res.day(i).meal(j).text() == "LUNCH")
{
for(var k = 0; k < res.day(i).meal(j).counter.dish; k++){
console.log( res.day(i).meal(j).counter.dish(k).name.text());
}
}
}
}
更新:由于使用 javascript xpath 类函数进行解析是首选,Parse 似乎还没有提供使用 Xpath 进行 XML 解析 - https://parse.com/questions/htmlxml-parser-with-xpath-on-cloud-code底部的声明 - 并建议改为包括适当的 javascript-library 或 node.js - 在此处找到示例:https://temboo.com/nodejs/parsing-xml - 也许这会有所帮助。如果尚未尝试,请检查 https://parse.com/questions/can-we-importrequireinclude-any-other-javascript-files-in-our-cloud-code
关于xml - Parse.com 云代码评估 xPath?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25352700/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'