根据另一个充当搜索条件的xml文件搜索文件的xml元素

时间:2012-07-28 20:48:46

标签: c# xml xpath

我正在尝试根据查询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> 

1 个答案:

答案 0 :(得分:1)

您写道:

  

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

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

如果您想让“list”的子节点在不同节点中的任何元素,您需要将其更改为:
 XmlNodeList nList = doc.SelectNodes("//Root/List/*");