0

我正在尝试根据查询 xml 文件搜索或获取一个文件的 xml 元素。此查询 xml 文件定义将搜索哪些元素并检索其值。即使元素存在,下面的代码也没有找到 xml 文件中的所有元素:

任何人都可以告诉我如何改进我的代码,或者找出问题所在?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace ReadXMLRecursively
{
    class Program
    {
        static void Main(string[] args)
        {

            doc.Load(@"C:\Requests.xml");
            doc2.Load(@"C:XmlLists.xml");

            XmlNodeList nList2 = doc2.SelectNodes("//Root/Element");

                    XmlNodeList nList = doc.SelectNodes("//Root/List");

                    foreach (XmlNode xmlNode in nList)
                    {
                        if (nList2 != null)
                            foreach (XmlNode n in nList2)
                            {
                                if (n.Attributes != null)
                                {
                                    string val = n.Attributes.GetNamedItem("SourceCol").Value;

                                    if (xmlNode[val] != null)
                                    {
                                        //if (n.Attributes != null) Console.WriteLine(n.Attributes.GetNamedItem("SourceCol").Value);
                                        XmlElement xmlElement = xmlNode[val];
                                        if (xmlElement != null) Console.WriteLine(xmlElement.Name);
                                    }
                                    else
                                    {
                                        Console.WriteLine(val + " not found");
                                    }
                                }
                            }
                        Console.WriteLine("------------- end------------------");
                    }
    }
}

XML 文件 1

<root> 
  <list> 
       <FirstName>Abc</FirstName> 
       <LastName>LT</LastName> 
       <Occupatoin>Eng</Occupation> 
       <BirthDate></BirthDate> 
      ... 
 </list> 
</root> 

XML 文件 2

<root> 
  <Trainings> 
       <Java>Ab</Java> 
       <NET>b</NET> 
       <SQL>c</SQL> 
       <Powershell>d</Powershell> 
      ... 
 </Trainings> 

根据这个xml文件搜索上面的xml文件

<root> 
    <Element Name="Firstname /> 
    <Element Name="Lastname" /> 
    <Element Name="Occupation" /> 
    <Element Name="Java" /> 
    <Element Name="Net" /> 
    ... 
</root> 
4

1 回答 1

1

你写了:

XmlNodeList nList = doc.SelectNodes("//Root/List");

在您的示例中,只有一个名为“list”的元素,因此您将nList只进入一个节点,其中包含一个包含所有子节点的长字符串,因此您无法通过循环获取它们。

如果要获取“列表”不同节点中任何元素的子节点,则需要将其更改为:
XmlNodeList nList = doc.SelectNodes("//Root/List/*");

于 2012-09-20T12:21:55.553 回答