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

时间:2011-03-19 15:20:06

标签: c# xml data-import

如何在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>

我需要将其转换为角色映射的二维排列。

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

如果您正在使用.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());

答案 2 :(得分:0)

由于您添加了更多详细信息,我现在可以提供更好的答案。 这是一个功能性的xml解析和加入控制台应用程序,它演示了你正在寻找的东西(我认为)。要解析xml文件而不是xml字符串,请使用XDocument Load方法而不是显示的Parse方法。祝你好运,

            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);

会议变量的每次请求:

匿名类型仅适用于方法。要将列表放入Session变量以供在其他地方使用,请创建一个包含3个所需属性的自己的实际类,并将上面的代码行更改为与下面的代码非常匹配。 (我选择的班级名称是CrossReferenceTranslation。)

        Session["CrossReference"] = (from d in devanagriKeys
                              join g in gujrathiKeys on d.Key equals g.Key
                              select new CrossReferenceTranslation() {
                                    d.Key,
                                    Devanagri = d.Character,
                                    Gujrathi = g.Character
                                }).ToList();

...然后,在其他某个时间点,您可以执行此操作以将会话对象列表转换为变量。注意假设变量可以为null,这会在会话超时时发生......

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