读取XML文件时仅获取Group元素文本的最后一个元素

本文关键字:元素 文本 最后一个 Group 获取 XML 文件 读取 | 更新日期: 2023-09-27 18:26:50

我试图读取一个XML文件,但当我读取它时,它只会获取我的Group元素的最后一个值,而不是在每个Group的结束符处设置Group的文本属性。感谢所有的帮助。

public static void ReadFile()
{
    string MyText = string.Empty;
    string Notes = string.Empty;
    string UserName = string.Empty;
    string Password = string.Empty;
    string Url = string.Empty;
    string Title = string.Empty;
    string MyGroup = string.Empty;
    Group group = new Group("Hello", 0);
    XmlTextReader xmlReader = new XmlTextReader("C:/KeyText.xml");
    while (xmlReader.Read()) // Read nodes sequentially
    {
        if (xmlReader.Name == "Group" & xmlReader.NodeType.ToString() == "EndElement")
        {
            group.Text = MyText;
            AddGroupXML(group);
        }
        if (xmlReader.NodeType == XmlNodeType.Element)
        {
            if (xmlReader.LocalName == "Text")
            {
                MyText = xmlReader.ReadString();
            }
            if (xmlReader.LocalName == "Notes")
            {
                Notes = xmlReader.ReadString();
            }
            if (xmlReader.LocalName == "UserName")
            {
                UserName = xmlReader.ReadString();
            }
            if (xmlReader.LocalName == "Password")
            {
                Password = xmlReader.ReadString();
            }
            if (xmlReader.LocalName == "Url")
            {
                Url = xmlReader.ReadString();
            }
            if (xmlReader.LocalName == "Title")
            {
                Title = xmlReader.ReadString();
            }
        }
        if (xmlReader.Name == "Key" & xmlReader.NodeType.ToString() == "EndElement")
        {
            Key MyKey = new Key();
            MyKey.Notes = Notes;
            MyKey.Title = Title;
            MyKey.UserName = UserName;
            MyKey.Url = Url;
            MyKey.Password = Password;
            group.Keys.Add(MyKey);
        }
    }
    xmlReader.Close();
    GroupsRead.Invoke();
}

XML:

<?xml version="1.0"?>
<Groups>
  <Group>
    <ImageIndex>0</ImageIndex>
    <Text>wcwpgcuotlx</Text>
    <Keys>
      <Dog/>
      <Key>
        <Notes>4ktaiyduner</Notes>
        <Password>0y2cg1kodre</Password>
        <Title>a2yj4biqd5u</Title>
        <Url>de2uym5vyg1</Url>
        <UserName>ogcl3uyvy2r</UserName>
      </Key>
      <Key>
        <Notes>3dmchyaqcvt</Notes>
        <Password>lbgfralkng4</Password>
        <Title>fnha4ienzua</Title>
        <Url>n3pmk5elaso</Url>
        <UserName>njk55ov4eef</UserName>
      </Key>
    </Keys>
  </Group>
  <Group>
    <ImageIndex>0</ImageIndex>
    <Text>vrmijzokft2</Text>
    <Keys>
      <Dog/>
    </Keys>
  </Group>
</Groups>

读取XML文件时仅获取Group元素文本的最后一个元素

我认为您的问题是您有一个用于所有组的Group对象。因此,由于每次都使用相同的参数调用AddGroupXML(),因此结果将多次包含相同的对象。文本值将是您为其设置的最后一个值。

要解决此问题,请更改将组添加到以下内容的代码:

group.Text = MyText;
AddGroupXML(group);
group = new Group("Hello", 0);

将来,如果使用LINQ to XML来处理XML,可能会更容易。如果使用它,您的代码会简单得多。(这种方法的缺点是它将整个XML加载到内存中,这对于巨大的XML文件来说是个坏主意。)