【问题标题】:ASP.NET unable to select node using SelectSingleNode method with namespace managerASP.NET 无法使用带有命名空间管理器的 SelectSingleNode 方法选择节点
【发布时间】:2015-02-23 22:40:31
【问题描述】:

我应该配置什么命名空间来读取 Google 购物提要?然后如何使用 ASP.NET 选择一个值? 我似乎无法选择节点 g:google_product_category 的值

我的 Google 提要(为概述省略了一些节点)

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
    <channel>
        <title><![CDATA[Foo]]></title>
        <link>http://www.foo.com/</link>
        <description><![CDATA[]]></description>
        <item>
            <g:id>10580119</g:id>
            <title><![CDATA[Some title]]></title>
            <g:google_product_category><![CDATA[Bags]]></g:google_product_category>
        </item>
    </channel>
</rss>      

我的代码

Dim productXML As New XmlDocument
Dim root As XmlNode
Dim node As XmlNode

productXML.LoadXml(responseString) 'responseString contains the full Google feed
Dim nodeList As XmlNodeList = root.SelectNodes("/rss/channel/item")

Dim mgr As XmlNamespaceManager = New XmlNamespaceManager(productXML.NameTable)
mgr.AddNamespace("g", productXML.DocumentElement.NamespaceURI)

'here a nodeList.Count call returns the correct number of products, so I'm able to read some items

For Each node In nodeList

If node.SelectSingleNode("g:google_product_category", mgr) IsNot Nothing Then 'what should I add here?!

【问题讨论】:

    标签: asp.net xml namespaces google-shopping


    【解决方案1】:

    productXML.DocumentElement.NamespaceURI 不对应“http://base.google.com/ns/1.0”,所以设置为

    mgr.AddNamespace("g", "http://base.google.com/ns/1.0")
    

    或使用 node.Item

    Dim productXML As New XmlDocument
    Dim node As XmlNode
    
    productXML.LoadXml(responseString)
    
    Dim mgr As XmlNamespaceManager = New XmlNamespaceManager(productXML.NameTable)
    mgr.AddNamespace("g", productXML.DocumentElement.NamespaceURI)
    
    Dim root As XmlElement = productXML.DocumentElement
    Dim nodeList As XmlNodeList = root.SelectNodes("/rss/channel/item", mgr)
    
    For Each node In nodeList
        If node.Item("g:google_product_category") IsNot Nothing Then
            Console.WriteLine(node.Item("g:google_product_category").InnerXml)
        End If
    Next
    

    【讨论】:

      猜你喜欢
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多