Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有Yahoo API的XPath_Xpath_.net 2.0 - Fatal编程技术网

带有Yahoo API的XPath

带有Yahoo API的XPath,xpath,.net-2.0,Xpath,.net 2.0,我一直在绞尽脑汁想知道如何使用C#/XPath/SelectNodes从Yahoo API XML结果中提取节点 我基本上有相同的问题,如下所述 以及 我一直坚持的一点是,确切地理解使用什么作为xmlns,以及为什么/是否需要在XPath中引用节点时使用前缀,因为XML节点本身没有前缀。Net 3.5不是本项目的选项 我的代码尝试(多次迭代中的一次): 我正在使用的XML: <?xml version="1.0"?> <ResultSet xmlns:xsi="http://

我一直在绞尽脑汁想知道如何使用C#/XPath/SelectNodes从Yahoo API XML结果中提取节点

我基本上有相同的问题,如下所述

以及

我一直坚持的一点是,确切地理解使用什么作为xmlns,以及为什么/是否需要在XPath中引用节点时使用前缀,因为XML节点本身没有前缀。Net 3.5不是本项目的选项

我的代码尝试(多次迭代中的一次):

我正在使用的XML:

<?xml version="1.0"?>
<ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="urn:yahoo:lcl" 
xsi:schemaLocation="urn:yahoo:lcl http://local.yahooapis.com/LocalSearchService/V3/LocalSearchResponse.xsd" 
totalResultsAvailable="35" totalResultsReturned="1" firstResultPosition="1">
<ResultSetMapUrl>http://maps.yahoo.com/broadband/?q1=San+Diego%2C+CA&amp;tt=Pizza&amp;tp=1</ResultSetMapUrl>
<Result id="20850086"><Title>Filippi's Pizza Grotto</Title><Address>1747 India St</Address>
<City>San Diego</City><State>CA</State><Phone>(619) 232-5094</Phone><Latitude>32.723421</Latitude>
<Longitude>-117.168194</Longitude><Rating><AverageRating>4</AverageRating>
<TotalRatings>115</TotalRatings><TotalReviews>32</TotalReviews><LastReviewDate>1246565979</LastReviewDate>
<LastReviewIntro>... edited ...</ClickUrl>
<MapUrl>http://maps.yahoo.com/maps_result?q1=1747+India+St+San+Diego+CA&amp;gid1=20850086</MapUrl>
<BusinessUrl>http://www.realcheesepizza.com/</BusinessUrl>
<BusinessClickUrl>http://www.realcheesepizza.com/</BusinessClickUrl><Categories><Category id="96926243">Pizza</Category>
<Category id="96926190">Italian Restaurants</Category>
<Category id="96926233">Continental Restaurants</Category>
<Category id="96926234">Carry Out &amp; Take Out</Category><Category id="96926236">Restaurants</Category>
</Categories></Result></ResultSet>
<!-- ws01.ydn.gq1.yahoo.com uncompressed/chunked Thu Aug 20 17:56:17 PDT 2009 -->

http://maps.yahoo.com/broadband/?q1=San+迭戈%2C+CA&;tt=比萨饼和比萨饼;tp=1
印度街1747号菲利比比萨饼窟
圣地亚哥(619)232-509432.723421
-117.1681944
115321246565979
... 编辑。。。
http://maps.yahoo.com/maps_result?q1=1747+印度+圣彼得堡+圣迭戈+加利福尼亚;gid1=20850086
http://www.realcheesepizza.com/
http://www.realcheesepizza.com/Pizza
意大利餐馆
大陆餐馆
推行;外卖餐厅
试试看

xml中的节点没有前缀,但它们有一个由xmlns=“…”指定的命名空间。因此,在执行XPath查询时,需要为正在搜索的元素提供名称空间。命名空间管理器和前缀允许您执行此操作

使用一个斜杠,您的查询可能会更快一些

XmlNodeList nodes = doc.SelectNodes("/lcl:ResultSet/lcl:Result",mgr);
试一试

xml中的节点没有前缀,但它们有一个由xmlns=“…”指定的命名空间。因此,在执行XPath查询时,需要为正在搜索的元素提供名称空间。命名空间管理器和前缀允许您执行此操作

使用一个斜杠,您的查询可能会更快一些

XmlNodeList nodes = doc.SelectNodes("/lcl:ResultSet/lcl:Result",mgr);

我不得不说这看起来有点像家庭作业。代码中有一些错误会给人留下被故意弄错的印象

  • 为什么要将XPath表达式馈送到
    GetElementsByTagName()
  • 为什么要创建一个与实际XML文档无关的新
    名称表
  • 为什么对路径中的第一个元素(ResultSet)使用名称空间前缀,而不对第二个元素(Result)使用名称空间前缀,即使它们都在同一名称空间中
这项工作:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
mgr.AddNamespace("lcl", "urn:yahoo:lcl");

XmlNodeList nodes = doc.SelectNodes("/lcl:ResultSet/lcl:Result", mgr);

我不得不说这看起来有点像家庭作业。代码中有一些错误会给人留下被故意弄错的印象

  • 为什么要将XPath表达式馈送到
    GetElementsByTagName()
  • 为什么要创建一个与实际XML文档无关的新
    名称表
  • 为什么对路径中的第一个元素(ResultSet)使用名称空间前缀,而不对第二个元素(Result)使用名称空间前缀,即使它们都在同一名称空间中
这项工作:

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
mgr.AddNamespace("lcl", "urn:yahoo:lcl");

XmlNodeList nodes = doc.SelectNodes("/lcl:ResultSet/lcl:Result", mgr);

这并没有起到作用:-(我对实际的名称空间感到困惑。给定行
mgr.AddNamespace(“lcl”,“urn:yahoo:lcl”);
,“urn:yahoo:lcl”正确吗?我看到的其他示例有一个“http://...."格式。我不是100%确定,但我认为名称空间可以看起来像任何东西。没有预定义的格式。按照惯例,人们倾向于使用URL样式的名称空间,但这只是一种惯例。我错过了Tomalak发现的NameTable错误。感谢您提供有关名称空间的信息并尝试帮助解决此问题。这没有用诀窍:-(我对实际的名称空间感到困惑。给定行
mgr.AddNamespace(“lcl”,“urn:yahoo:lcl”);
,“urn:yahoo:lcl”正确吗?我看到的其他示例有一个“http://...."格式。我不是100%确定,但我认为名称空间可以看起来很像任何东西。没有预定义的格式。按照惯例,人们倾向于使用URL样式的名称空间,但这只是一种惯例。我错过了Tomalak发现的NameTable错误。感谢您提供有关名称空间的信息并尝试帮助解决此问题。不,这不是家庭作业,第一次将XPath与名称空间一起使用:-)键使用文档中的现有名称表。不,不是家庭作业,第一次将XPath与名称空间一起使用:-)键使用文档中的现有名称表。