目前我正在尝试解析xml。当我用作容器时,所有信息都会正确返回。当我使用该程序时不返回任何信息
因此,当我尝试使用THIS XML格式列出节点时,一切正常;
<feed>
<entry>
<childnode1>blue</childnode1>
<childnode2>red</childnode2>
<childnode3>green</childnode3>
<childnode4>yellow</childnode4>
</entry>
</feed>
但我需要它以这种格式工作; (这目前无效)
<feed xmlns='x' xmlns:openSearch='y' xmlns:gsx='z'>
<entry>
<childnode1>blue</childnode1>
<childnode2>red</childnode2>
<childnode3>green</childnode3>
<childnode4>yellow</childnode4>
</entry>
</feed>
所以在我给出的第一个例子中,这个程序运行得很好;
Imports System.IO
Imports System.Xml
Module ParsingUsingXmlDocument
Sub Main()
Dim document As XmlDocument
Dim nodelist As XmlNodeList
Dim node As XmlNode
document = New XmlDocument()
document.Load("C:\Users\Joe\Documents\family.xml")
nodelist = document.SelectNodes("/feed/entry")
For Each node In nodelist
Dim stockinfo = node.ChildNodes.Item(4).InnerText
Console.WriteLine("Info: " & stockinfo)
Console.Write(vbCrLf)
Next
Console.ReadLine()
End Sub
End Module
但是当我使用我展示的第二个xml格式时,哪里有属性,什么都不起作用。我的程序完全是空白的。
有人可以建议我需要做些什么来解决这个问题吗?
谢谢
答案 0 :(得分:2)
尝试使用GetElementsByTagName:
变化:
nodelist = document.SelectNodes("/feed/entry")
为:
nodelist = document.GetElementsByTagName("entry")
答案 1 :(得分:0)
xmlns='x' xmlns:openSearch='y' xmlns:gsx='z'
- 这些不是属性,这些是名称空间声明。
您的xml文档具有名称空间,因此您必须考虑它们。
Dim document As XmlDocument = New XmlDocument()
document.Load("C:\Users\Joe\Documents\family.xml")
Dim uri As String = "x"
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(document.NameTable)
manager.AddNamespace("ns", uri)
Dim nodelist As XmlNodeList = document.SelectNodes("/ns:feed/ns:entry", manager)
For Each node As XmlNode In nodelist
Dim stockinfo = node.ChildNodes.Item(3).InnerText
Console.WriteLine("Info: " & stockinfo)
Console.Write(vbCrLf)
Next
您可以从节点获取命名空间,而不是显式指定命名空间:
Dim uri As String = document.DocumentElement.NamespaceURI
答案 2 :(得分:-1)
使用xml linq很容易。命名空间为您提供了问题
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XElement entry = doc.Descendants().Where(x => x.Name.LocalName == "entry").FirstOrDefault();
string[] resutls = entry.Elements().Select(x => (string)x).ToArray();
}
}
}