我有一个xml文件,我要做的是解析完整的文件并搜索特定的xml标记(在我的情况下,我搜索的是queryString
),当遇到标记时,拉出与其对应的内部文本。我使用XmlDocument
和XmlDocument.SelectNodes("/stringList")
。
在执行此操作时,将返回一个null
值。我是不是错过了什么?
XmlDocument xml = new XmlDocument();
Jrxml.Load(file_path);
XmlNodeList xml_nodes = xml.SelectNodes("/stringList");
foreach (XmlNode jr_node in xml_nodes)
{
XmlNode query_node = jr_node.SelectSingleNode("queryString");
}
当执行时,它不会进入for循环,因为xml_nodes
值是null
Xml文件如下所示。
<stringList>
<property1/>
<property2/>
<style>
<queryString>
</queryString>
</style>
<queryString>
</queryString>
</stringList>
如果您只搜索"queryString"标记,我建议您使用XmlDocument方法GetElementsByTagName。考虑:
using System;
using System.Xml;
namespace TestCon
{
class Program
{
private static XmlDocument TestDoc;
public static void Main(string[] args)
{
TestDoc = new XmlDocument();
TestDoc.LoadXml("<?xml version="1.0" encoding="utf-8"?>"+
"<stringList>n"+
"<property1/>n"+"<property2/>n"+
"<style>n"+"<queryString>Who's on fist."+"</queryString>n"+
"</style>n"+"<queryString>Who's on second."+"</queryString>n"+
"</stringList>");
XmlNodeList elemList = TestDoc.GetElementsByTagName("queryString");
foreach (XmlNode foundNode in elemList)
{
Console.WriteLine(foundNode.InnerText);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
您将得到两个您正在搜索的节点:
Who's on first.
Who's on second.
Press any key to continue . . .
我更喜欢在System.XML.Linq:中找到的XML类/功能
XDocument doc = XDocument.Parse(xmlString);
foreach (XElement queryString in doc.Descendants("queryString"))
{
// do something with queryString.Value ...
}
您可以像这个一样使用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
{
static void Main(string[] args)
{
string xml =
"<root>" +
"<stringList>" +
"<property1/>" +
"<property2/>" +
"<style>" +
"<queryString>" +
"</queryString>" +
"</style>" +
"<queryString>" +
"</queryString>" +
"</stringList>" +
"</root>";
XDocument doc = XDocument.Parse(xml);
var stringList = doc.Descendants("stringList").Select(x => new
{
property1 = x.Element("property1"),
property2 = x.Element("property2"),
style = x.Element("style"),
queryString = x.Element("queryString")
});
}
}
}