如何在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>
我需要将其转换为角色映射的二维排列。
答案 0 :(得分:2)
在Linq to XML上试用本教程 - http://www.switchonthecode.com/tutorials/introduction-to-linq-simple-xml-parsing
这个问题 - How to iterate through an XDocument, getting complete XML structure, object by object? - 也提供了一些有趣的代码
答案 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>();