读取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]]
另外,这样我就可以更好地研究这个问题,当数据在这样的标签内时,它叫什么?
谢谢你们了!
正如@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();