VB.net Axis表示法没有获取节点值

时间:2014-11-30 18:05:54

标签: xml vb.net visual-studio-2013

我从Web服务中删除了一些XML

<data>
  <request>
    <type>LatLon</type>
    <query>Lat 60.17 and Lon 24.94</query>
  </request>
  <time_zone>
    <localtime>2014-11-30 19:56</localtime>
    <utcOffset>2.0</utcOffset>
  </time_zone>
  <current_condition>

我想将本地时间部分拉入变量。

这是代码。

Public Function callWorldWeatherOnlineSearch(latitude, longitude) As Boolean


        Using client As New WebClient

            client.Encoding = Encoding.UTF8

            Dim arr = client.DownloadString("https://api.worldweatheronline.com/free/v2/weather.ashx?q=" & latitude & "%2C" & longitude & "&format=xml&num_of_days=5&tp=24&showlocaltime=yes&key=KEY")

            returnedXML = XElement.Parse(arr)

            localTime = returnedXML...<data>...<time_zone>...<localTime>.Value


        End Using

        Return True
    End Function

localTime变量不包含任何内容。

最烦人的是,当我在Visual Studio中编写代码时,轴符号正确(似乎!)遍历XML,所以我不知道我做错了什么?

Axis Notation Prompting

如果我直接选择节点,它也不起作用..我确定之前有效吗?没有其他localTime节点。

   localTime = returnedXML...<localtime>.Value

更新:

以下是该类的代码:

enter image description here

这是抓取.xsd文件和targetNamespace唯一引用

enter image description here

这里他们在解决方案资源管理器中彼此相邻

enter image description here

我刚注意到它是localTime所以我把它改成了本地时间,但仍无济于事。检查分配线上的抓斗。

enter image description here

下一行(应该在哪里进行分配)..大胖什么都没有。

enter image description here

这是当地人的窗口:

enter image description here

感谢您对此表示支持。我还能检查什么?

更新2:

所以这里什么也没发生,我真的不想进入Xpath。所以我想我会尝试将.xsd和天气类移到另一个文件夹中。

我还删除了对xsd的导入引用,想知道它是否会先搜索本地文件夹。

现在它正在拾取错误的XSD文件。这是一个线索,XSD是否必须在运行时匹配,并且可能存在一些问题。

enter image description here

更新3:

行。我把这一切都搞砸到一个单独的项目中,只是为了解决这个问题。

在尝试从XSD文件中删除引用之前,它仍然无法正常工作

我从.xsd和congo中删除了targetNamespace =“http://mynamespace.org/wwo”!

回到我的主要项目。

我像以前一样删除了targetNamespace =“http://mynamespace.org/wwo”,引用了.xsd和lo的import语句,看到我有数据!

intellisense也有效,我现在假设,因为它与班级在同一个文件夹中。

所以正是XSD参考文献搞砸了,尽管我根据之前的问题绝对引用了XSD。

Use two xsd schemas in visual studio 2012

指向谁能看到我哪里出错? ! Yippee无论如何都在工作。感谢

1 个答案:

答案 0 :(得分:1)

您必须从查询中删除<data>元素,因为它是根元素,所以它是隐含的。所以它是:

   Dim xml = client.DownloadString(...)
   Dim dataNode = XElement.Parse(xml)
   localtime = dataNode...<time_zone>...<localTime>.Value

使用您发布的xml进行测试,运行正常。如果这仍然失败,那么您没有获得您期望的XML。使用调试器进行查看。