在C#中读取XML - 获取特定元素

11 浏览
0 Comments

在C#中读取XML - 获取特定元素

我正在读取一些XML并将其显示在DataGridView中,效果很好。

然而,如果我能够获取特定的元素并读取它们的内容,我的生活将变得轻松10倍(我正在使用XmlReader)。

另外,有没有一种简单的方法来循环遍历一个元素?我需要获取计数,然后循环遍历每个"Facility",但似乎无法正常工作。添加另一个"While(read)"并不是一个好的解决方案。

我目前希望不要切换到另一个阅读器,因为我目前已经深入研究了这个。

XML数据:


    2
    
        1
        Beds
        0
        null
    
    
        2
        EDBeds
        0
        null
    

代码:

while (xr.Read())
{
    if (xr.Name.Equals("count"))
    {
        valueName.Text = "我们目前有" + xr.ReadElementContentAsString() + "个设施开放。";
    }
    while (xr.ReadToFollowing("facility"))
    {
        //如果我们在新的Facility元素上,为数据添加一行
        if (xr.NodeType == XmlNodeType.Element && xr.Name == "facility")
        {
            row = generalData.Rows.Add();
            col = 0;
        }
        //循环遍历当前facility元素
    }
}

0
0 Comments

问题:在C#中读取XML文件时,如何获取特定的元素?

原因:在读取XML文件时,我们希望能够通过特定的元素来进行一些操作。然而,我们可能会遇到一些困难,因为XML文件的结构可能比较复杂,而且我们可能只对其中某些特定的元素感兴趣。

解决方法:通过使用"ReadSubTree()"方法,我们可以很容易地获取到我们想要的特定元素。下面是代码示例:

XmlReader xr = XmlReader.Create("example.xml");
XmlReader inner = xr.ReadSubtree();
while (inner.Read())
{
    if (xr.NodeType == XmlNodeType.Text)
    {
        // 在这里进行相关操作
    }
}

通过使用上述代码,我们可以在读取XML文件时,获取到我们感兴趣的特定元素,并且在获取到元素后,可以对其进行相应的操作。这样,我们就可以更加灵活地处理XML文件中的数据了。

0
0 Comments

问题的出现原因是我们在读取 XML 数据时需要将所有的 'facility' 元素都遍历一遍,才能将数据绑定到 DataGridView 上。然而,实际上我们只需要执行一些简单的步骤就能实现目标。

解决方法是使用 DataSet 类来读取 XML 数据,并将其绑定到 DataGridView 上。具体步骤如下:

首先,创建一个 DataSet 对象:

DataSet ds = new DataSet();

然后,使用 ReadXml 方法从 XMLReader 对象中读取 XML 数据,并将其存储到 DataSet 对象中:

ds.ReadXml(xr);

最后,将 DataSet 对象中名为 "facility" 的表格作为 DataGridView 的数据源:

dataGridView1.DataSource = ds.Tables["facility"];

这样,我们就成功地将特定的元素数据绑定到了 DataGridView 上。

通过以上步骤,我们能够更加简便地实现读取 XML 数据并选择性地绑定特定元素数据到 DataGridView 的目标。

0
0 Comments

阅读XML在C#中的内容-获取特定元素 在这个问题中的原因是XmlReader已经过时且包含错误,而XDocument的API更容易使用并支持'LINQ To XML'。 解决方法是使用XDocument来读取和处理XML数据。以下是一个示例代码,演示如何使用XDocument从XML字符串中读取数据,并在其中添加和处理元素。

var xml = @"

    2
    
        1
        Beds
        0
        null
    
    
        2
        EDBeds
        0
        null
    
";
var xDocument = XDocument.Load(new StringReader(xml));
var facilityElements = xDocument.Descendants().Where(x => x.Name == "facility");
// 计算元素数量
var count = facilityElements.Count();
// 遍历元素
foreach (var facilityElement in facilityElements)
{
    // 处理元素
}
// 添加一个facility元素
var facility = new XElement("facility");
var typeId = new XElement("typeId");
typeId.SetValue(3);
facility.Add(typeId);
xDocument.Element("data").Add(facility);

如果有人看到这个问题,我完全同意,我强烈推荐使用另一个阅读器。 XmlReader有点麻烦。

0