C# 如何从XML文件导入/读取数据?

C# 如何从XML文件导入/读取数据?,c#,xml,data-import,C#,Xml,Data Import,如何在C中访问XML文件? 如何计算该xml文件中的节点数? 我应该如何访问xml文件中的每个节点 我有两个xml文件,其中一个是dev.xml,其中包含以下代码 <Devanagri_to_itrans> <mapping> <character>अ</character> <itrans>a</itrans> </mapping> ... </Devanagri_to_itr

如何在C中访问XML文件? 如何计算该xml文件中的节点数? 我应该如何访问xml文件中的每个节点

我有两个xml文件,其中一个是dev.xml,其中包含以下代码

<Devanagri_to_itrans>
  <mapping>
    <character>अ</character>
    <itrans>a</itrans>
  </mapping>
  ...
</Devanagri_to_itrans>
第二个文件是结构非常相似的guj.xml

<Gujrathi_to_itrans>
  <mapping>
     <character>અ</character>
     <itrans>a</itrans>
  <mapping>
  ...
</Gujrathi_to_itrans>

我需要将其转换为字符映射的二维数组。

试试这个关于Linq到XML的教程-


如果您正在使用.net 3.5或更高版本,通过设置对System.XML.LINQ的引用来使用LINQ to XML,这个问题还提供了一些有趣的代码。 下面是控制台应用程序窗口中给定xml文件中元素的简单计数:

string xml = @"<xml><a/><a/><a/></xml>";
XDocument doc = XDocument.Parse(xml);
Console.WriteLine((from a in doc.Descendants("a")
                   select a).Count());

既然您添加了更多的细节,我现在可以提供更好的答案。 这里是一个功能性的xml解析和加入控制台应用程序,它演示了我认为您正在寻找的内容。要解析xml文件而不是xml字符串,请使用XDocument加载方法而不是显示的解析方法。祝你好运

            XDocument docA = XDocument.Parse(
@"<Devanagri_to_itrans>
  <mapping>
    <character>अ</character>
    <itrans>a</itrans>
  </mapping>
</Devanagri_to_itrans>");
            XDocument docB = XDocument.Parse(
@"<Gujrathi_to_itrans>
  <mapping>
     <character>અ</character>
     <itrans>a</itrans>
  </mapping>
</Gujrathi_to_itrans>");
            var devanagriKeys = (from d in docA.Descendants("mapping")
                                                  select new {
                                                      Key = d.Descendants("itrans").FirstOrDefault().Value,
                                                      Character = d.Descendants("character").FirstOrDefault().Value
                                                  }).ToArray();
            var gujrathiKeys = (from g in docB.Descendants("mapping")
                                                  select new {
                                                      Key = g.Descendants("itrans").FirstOrDefault().Value,
                                                      Character = g.Descendants("character").FirstOrDefault().Value
                                                  }).ToArray();
            var crossReference = (from d in devanagriKeys
                                  join g in gujrathiKeys on d.Key equals g.Key
                                  select new {
                                        d.Key,
                                        Devanagri = d.Character,
                                        Gujrathi = g.Character
                                    }).ToList();
            Console.WriteLine("Enter a key character to translate:");
            string searchKey = Console.ReadLine();
            var translation = crossReference.Where(cr => cr.Key == searchKey).FirstOrDefault();
            if (translation == null) 
                Console.WriteLine("No such key in the cross reference.");
            else
                Console.WriteLine("{0} is {1} in Devanagri and {2} in Gujrathi", 
                    translation.Key, translation.Devanagri, translation.Gujrathi);
            Console.ReadKey(true);
…然后,在其他时间点,您可以这样做,将会话对象列表放入变量中。请注意,假设变量可能为null,这将在会话超时时发生

List<CrossReferenceTranslation>() crossReference = Session["CrossReference"] ?? 
   new List<CrossReferenceTranslation>();

我不想显示计数,我想通过将它存储在一个变量中来进一步使用它。我该怎么做呢?谢谢用var c替换Console.WriteLine=我的xml文件在visual studio中,但我不希望整个代码存储在字符串xml中,我只想读取节点并存储它!!谢谢你的代码。。。请帮我再做一件事。。。如何将此列表存储在会话变量中???所以我可以在将来轻松访问它frm othr asp文件。。。假设TEMP是一个数组。将数组放入会话:会话[array]=TEMP;并在另一个页面中检索数组:ArrayList temp=System.Collections.ArrayListSession[array];首先,使用列表而不是ArrayList。自.NET2.0以来,由于装箱,ArrayList一直处于劣势。我添加了将翻译器放到会话变量中的代码,但是您确实应该考虑比会话[]更持久和可扩展的解决方案。
List<CrossReferenceTranslation>() crossReference = Session["CrossReference"] ?? 
   new List<CrossReferenceTranslation>();