使用XmlDocument在xml文件中提取特定的xml标记



我有一个xml文件,我要做的是解析完整的文件并搜索特定的xml标记(在我的情况下,我搜索的是queryString),当遇到标记时,拉出与其对应的内部文本。我使用XmlDocumentXmlDocument.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")
            });
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新