【问题标题】:Parsing XML does not select any nodes through SelectNodes method解析 XML 不通过 SelectNodes 方法选择任何节点
【发布时间】:2015-09-12 14:44:23
【问题描述】:

我正在尝试解析这个 XML:

<?xml version="1.0" encoding="utf-8" ?>
<products xmlns="http://www.fusepumpaffiliates.co.uk/feed-distribution/etsy/us/">
    <product>
        <title>Product 1</title>
    </product>
    <product>
        <title>Product 2</title>
    </product>
    <product>
        <title>Product 3</title>
    </product>  
</products> 

下面的代码可以与其他 XML 文件一起使用而没有任何问题,所以我不明白为什么下面的代码不适用于这个特定的 XML 提要。 节点数我都数不过来:

Dim req As HttpWebRequest
Dim Resp As HttpWebResponse
Dim reader As StreamReader
Dim responseString As String = ""
'get the XML
Dim productXML As New XmlDocument
Dim node As XmlNode
Dim root As XmlNode

req = HttpWebRequest.Create(fpm.feedURL)
req.Timeout = 3600000 '3600 seconds
Resp = req.GetResponse()
reader = New StreamReader(Resp.GetResponseStream)
responseString = reader.ReadToEnd()

productXML.LoadXml(responseString)
Dim mgr As XmlNamespaceManager = New XmlNamespaceManager(productXML.NameTable)
mgr.AddNamespace("whatever", productXML.DocumentElement.NamespaceURI)
root = productXML.DocumentElement

nodeList = root.SelectNodes("/products/product")    

'nodeList.count = 0 here?!??!

For Each node In nodeList


        If node.SelectSingleNode("categories") IsNot Nothing Then   

        End If
Next node

【问题讨论】:

  • 在这些情况下,有一个过程对我来说总是有效的:首先有一个完美工作的简单版本,然后增加它的复杂性/考虑正确的输入。例如:取一个可靠的简单示例代码(MSDN ->msdn.microsoft.com/en-us/library/hcebdtae(v=vs.110).aspx;我认为您使用的是不同的命名空间;但您明白了);编写一个简单的输入文件(几个节点理想地模拟真实输入的结构)并努力解决它,直到确保它完美运行。然后,您可以根据需要扩大规模。
  • 谢谢!正是定义的命名空间导致了问题。
  • 嗯...实际上是你而不是我。
  • 让我走上正轨的要点 :)

标签: asp.net xml vb.net xml-parsing


【解决方案1】:

显然,当 XML 中没有定义命名空间时,我可以为命名空间使用任何名称。但是如果有一个命名空间,比如在我的提要中,我必须使用那个命名空间。 现在可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2016-08-19
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    相关资源
    最近更新 更多