0

クエリxmlファイルに基づいて1つのファイルの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」という名前の要素が1つしかないため、すべての子ノードを含む1つの長い文字列を持つ1つのnListノードに入るだけなので、ループで取得することはできません。

別のノードの要素を「リスト」する子を取得する場合は、次のように変更する必要があります。
XmlNodeList nList = doc.SelectNodes("//Root/List/*");

于 2012-09-20T12:21:55.553 に答える