【问题标题】:C# reading XML , how to get the valueC#读取XML,如何获取值
【发布时间】:2013-12-06 03:23:03
【问题描述】:

我是 XML 新手。需要一些帮助。 我可以得到 pro NAME 但是 如何获得 scode 的值? JDK...废话

<pro NAME="JK1233k">
<scode ID="A">JDK-ORPLL-PDILL</scode>
</pro>


XmlReader reader = XmlReader.Create("file.xml");
while (reader.Read())
{
    if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == "pro"))
    {
        Console.WriteLine(reader["NAME"]);
    }
    else if((reader.NodeType == XmlNodeType.Element) && (reader.Name == "scode"))
    {
        Console.WriteLine(reader["ID"]);
       //what do I put here to get the value????
    }
}
reader.Close();

【问题讨论】:

    标签: c# xml xmlreader


    【解决方案1】:

    您正在寻找的是:

    Console.WriteLine(reader.ReadInnerXml());
    


    我个人更喜欢 LINQ 到 XML。如果你还没有调查,你应该。您可以以更清洁的方式实现相同的目标。

    在您的 c# 文件的开头放置以下内容:

    using System.Linq;
    using System.Xml.Linq; // loads the linq to xml part
    

    大多数 XML 文件远不止一个元素。因此,您的代码将是这样的:

    // Load XML file as an IEnumerable. This allows you to query it.
    var xmlDoc = XDocument.Load(file)
        .Elements("pro")
        .Select(pro => new
                {
                    Name = pro.Attribute("NAME").Value,
                    Scode = pro.Elements("scode").Select(scode => new
                    {
                        ID = scode.Attribute("ID").Value,
                        Val = scode.Value
                    })
                });
    
    // loop through each <pro> element          
    foreach (var pro in xmlDoc)
    {
        // Get Pro Name
        Console.WriteLine(pro.Name);
    
        // loop through each <scode> element inside <pro>
        foreach(var scode in pro.Scode)
        {
            // Get Scode ID:
            Console.WriteLine(scode.ID);
    
            // Get Scode Value:
            Console.WriteLine(scode.Val);
        }
    }
    

    如果您的 XML 只是一个 SINGLE 元素,您可以这样做:

    // Load XML file:
    var pro = XElement.Load("file.xml");
    
    // Get Pro Name
    pro.Attribute("NAME").Value;
    
    // Get Scode ID:
    pro.Element("scode").Attribute("ID").Value;
    
    // Get Scode Value:
    pro.Element("scode").Value;
    

    【讨论】:

    • 请不要在不必要的时候使用Descendants
    【解决方案2】:

    考虑下面的代码 sn-p...

    XDocument doc = XDocument.Load("file.xml");
    foreach (XElement element in doc.Descendants("pro"))
    {
        Console.WriteLine(element.Attribute("NAME").Value);
    }
    
    foreach (XElement element in doc.Descendants("scode"))
    {
        Console.WriteLine(element.Value);
    }
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2012-09-13
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      相关资源
      最近更新 更多