读取XML内部标签(内部?)

本文关键字:内部 标签 XML 读取 | 更新日期: 2023-09-27 18:14:22

好的,我在阅读我们公司一个臭名昭著的格式错误的xml文件时遇到了一个小问题。

尝试从中获取5个值,并将它们单独保存为变量。

这是一个棘手的XML示例。(我可能没有使用正确的术语,但我找不到任何关于读取这种类型的值)

<ONE>
    <TWO>
      <THREE>
      </THREE>
    </TWO>
  <DATA internalid="1" externalid="2" lastname="lname" firstname="name" date="20.03.2003"/>
</ONE>

所以,我需要的数据是内部id,外部id,姓,名和日期。

到目前为止,我一直在做什么,却无法取得任何进展。

string xml = (@"C:'1.xml");
var xmlElement = XElement.Load(xml);
var xmlList = (from message in xmlElement.Elements("DATA")
               select new
               {
                   internalid = message.Attribute("internalid").Value,
                   externalid = message.Attribute("externalid").Value,
                   lastname = message.Attribute("lastname").Value,
                   firstname = message.Attribute("firstname").Value,
                   date = message.Attribute("date").Value
               }).ToString();

我不能让它飞起来。我没有得到任何错误,但当我把这个字符串输出到richtextbox或文本框时我得到这个....

来。Enumerable+WhereSelectEnumerableIterator 2[System.Xml.Linq.XElement,<>f__AnonymousType0 5[System.String,System.String,System.String,System.String,System.String]]

另外,这样我就可以更好地研究这个问题,当数据在这样的标签内时,它叫什么?

谢谢你们了!

读取XML内部标签(内部?)

正如@Jon Skeet提到的,您正在对序列调用ToString()。下面的代码可能会让你更接近你想要的解决方案。

var xmlList = (from message in xmlElement.Elements("DATA")
                select new
                {
                    internalid = message.Attribute("internalid").Value,
                    externalid = message.Attribute("externalid").Value,
                    lastname = message.Attribute("lastname").Value,
                    firstname = message.Attribute("firstname").Value,
                    date = message.Attribute("date").Value
                });
StringBuilder builder = new StringBuilder();
foreach (var item in xmlList)
{
    builder.Append(item);
}
string test = builder.ToString();

至于你关于"数据在标签内"的问题。这些都是XML属性的例子。

这是一个很好的资源来开始学习linq的介绍linq查询(c#)

读取数据并保存到变量的方式没有问题。要显示数据,无需尝试将xmlList对象转换为字符串,只需遍历列表以输出数据。

string xml = (@"C:'1.xml");
var xmlElement = XElement.Load(xml);
var xmlList = (from message in xmlElement.Elements("DATA")
        select new
        {
            internalid = message.Attribute("internalid").Value,
            externalid = message.Attribute("externalid").Value,
            lastname = message.Attribute("lastname").Value,
            firstname = message.Attribute("firstname").Value,
            date = message.Attribute("date").Value
        });
StringBuilder outputString = new StringBuilder();
foreach (var xmlRecord in xmlList)
{
    string outputRecord = 
        string.Format("internalid: {0}, externalid: {1}, lastname: {2}, firstname: {3}, date: {4}", 
        xmlRecord.internalid.ToString(), xmlRecord.externalid.ToString(), 
        xmlRecord.lastname.ToString(), xmlRecord.firstname.ToString(),
        xmlRecord.date.ToString());
    outputString.AppendLine(outputRecord);
}
Console.WriteLine(outputString.ToString());
Console.ReadLine();