【问题标题】:Reading value from XML file into Textbox将 XML 文件中的值读入文本框
【发布时间】:2021-02-24 18:08:28
【问题描述】:

我几天来一直在尝试将 XML 文件中的值读取到文本框中。我搜索了相关问题:

Reading values from xml file with Linq
C# Reading from XML files
Getting values from xml file using C#
How to Read values from XML file
和视频:
https://www.youtube.com/watch?v=4dPWkEARptI
https://www.youtube.com/watch?v=-DwANN5_BoE

不过,我仍然无法正确读取“背景”值,并且总是收到此错误: (我怀疑它与 XML 文件的层次结构有关,我没有选择正确的 Element \ Node)我错过了什么?

An unhandled exception of type 'System.Xml.XmlException' occurred in System.Xml.dll
Additional information: 'None' is an invalid XmlNodeType. 

我的 XML 文件:

<?xml version="1.0"?>
<ArrayOfXMLSaveClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <XMLSaveClass>

    <Background>D:\Temp\100 Ideas for Every Occasion.pdf</Background>

</XMLSaveClass>

到目前为止我的代码:

        private void button4_Click(object sender, EventArgs e)
        {
            OpenFileDialog OP = new OpenFileDialog();
            OP.Filter = "XML files (*.xml)|*.xml";
            OP.DefaultExt = "xml";
            OP.AddExtension = true;
            if (OP.ShowDialog() == DialogResult.OK)
            {
                XmlReader XDoc = XmlReader.Create(OP.Filename);

                while (XDoc.Read());
                {
                    if (XDoc.NodeType == XmlNodeType.Element && XDoc.Name == "Background")
                    {

                    }                   
                } 
                string L01 = XDoc.ReadElementString();
                txtInputFileT.Text = L01;   
            }
        }

【问题讨论】:

  • 首先,您发布的 XML sn-p 不完整。
  • @aybe 你能详细说明一下吗?
  • 不是“不完整”,而是无效的 XML。
  • @IanKemp 哪一行无效?
  • 标签ArrayOfXMLSaveClass没有结束标签。无论如何,您为什么要自己逐个节点解析xml?为什么不使用linq2XmlXmlSerializer

标签: c# xml file


【解决方案1】:

下面的呢,它确实读取并打印了所有Background后代?

using System;
using System.IO;
using System.Xml.Linq;

namespace zzzzzzzz
{
    internal static class Program
    {
        private static void Main(string[] args)
        {
            var xml = @"<?xml version=""1.0""?>
<ArrayOfXMLSaveClass xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
  <XMLSaveClass>
    <Background>D:\Temp\100 Ideas for Every Occasion.pdf</Background>
  </XMLSaveClass>
</ArrayOfXMLSaveClass>
";

            using var reader = new StringReader(xml);

            var xDocument = XDocument.Load(reader);

            var xElements = xDocument.Descendants("Background");

            foreach (var element in xElements)
            {
                Console.WriteLine($"{element.Name}: {element.Value}");
            }
        }
    }
}

编辑:

这行得通,顺便说一句,您的 XML 无效,这是正确的:

代码:

using System;
using System.Windows.Forms;
using System.Xml;

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var dialog = new OpenFileDialog
            {
                Filter = "XML (*.xml)|*.xml"
            };

            if (dialog.ShowDialog() != DialogResult.OK)
                return;

            using var stream = dialog.OpenFile();
            using var reader = XmlReader.Create(stream);

            while (reader.Read())
            {
                if (reader.NodeType != XmlNodeType.Element || reader.Name != "Background")
                    continue;

                var value = reader.ReadElementContentAsString();

                MessageBox.Show(value);
            }
        }
    }
}

XML:

<?xml version="1.0" encoding="utf-8"?>

<ArrayOfXMLSaveClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <XMLSaveClass>
        <Background>D:\Temp\100 Ideas for Every Occasion.pdf</Background>
    </XMLSaveClass>
</ArrayOfXMLSaveClass>

【讨论】:

  • 我的问题中的代码在一些示例视频中有效,但它并没有结束。你能指出原因吗?非常感谢。
  • 在 XML 文件中仅使用 1 行即可完美运行。当我添加更多元素时,它会出现错误并转到第 59 行,即文件 The ReadElementContentAsString method is not supported on node type None. Line 59, position 23. 中的最后一行
  • 用XDocument,好很多
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
相关资源
最近更新 更多