Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C读取标记内部的XML(内部?)_C#_Xml_Winforms_Linq To Xml_Xelement - Fatal编程技术网

C# C读取标记内部的XML(内部?)

C# C读取标记内部的XML(内部?),c#,xml,winforms,linq-to-xml,xelement,C#,Xml,Winforms,Linq To Xml,Xelement,好的,我在读取我公司一个臭名昭著的格式错误的xml文件时遇到了一个小问题 尝试从中获取5个值,并将它们单独保存为变量 下面是一个棘手的XML示例。 我可能没有使用正确的术语,但在读取此类值时找不到任何内容 <ONE> <TWO> <THREE> </THREE> </TWO> <DATA internalid="1" externalid="2" lastname="lname" fir

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

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

下面是一个棘手的XML示例。 我可能没有使用正确的术语,但在读取此类值时找不到任何内容

<ONE>
    <TWO>
      <THREE>
      </THREE>
    </TWO>
  <DATA internalid="1" externalid="2" lastname="lname" firstname="name" date="20.03.2003"/>
</ONE>
我无法让它飞起来。并不是说我得到了任何错误,但当我把这个字符串输出到richtextbox或只是textbox时,我得到了这个

System.Linq.Enumerable+Where SelectEnumerableInterator2[System.Xml.Linq.XElement,f_uAnonymousType05[System.String,System.String,System.String,System.String,System.String]]

而且,我可以更好地研究这个问题,当数据像这样在标记中时,它叫什么


谢谢大家

正如@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();
至于你关于数据的问题就在这样的标签里。这些都是成功的例子


这里有一个开始学习linq的好资源。

读取数据并保存到变量的方式没有问题。要显示数据,不要尝试将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();

嗯,是的,你在序列上调用ToString。你期望结果是什么?为什么?在我看来,这根本不是XML问题。此外,请在POST中更加注意代码的格式-不需要所有缩进。您应该将方法ToString直接应用于XElement对象,或者创建自定义类型,而不是使用匿名类重写ToString。但无论如何,您将得到可枚举的linq查询输出。您可以应用类似String.JoinlinqResult.Selectx=>x.ToString的内容。现在,将ToString切换为ToList。。。。从中得到了很好的输出。它是有效的。现在正致力于将这个列表转换成单个字符串或变量……Jon Skeet,这不是很有建设性,也不是很有必要。警告一个新成员使用这样的方法也是不好的。我们都能读。谁在乎为了清晰而进行一些编辑?
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();