C# 文件。多亏了这些帮助,大家都很在行,但XML有一个更大的问题。遗憾的是,你不能把手表放在这些元素上,看哪一个元素坏了…@fullNelson是的,这就是我的意思,在你以后的过程中需要正确处理它。缺少的元素将为空,因此是否要指定默认值?过滤掉它们?要过滤掉这
C# 文件。多亏了这些帮助,大家都很在行,但XML有一个更大的问题。遗憾的是,你不能把手表放在这些元素上,看哪一个元素坏了…@fullNelson是的,这就是我的意思,在你以后的过程中需要正确处理它。缺少的元素将为空,因此是否要指定默认值?过滤掉它们?要过滤掉这,c#,linq,C#,Linq,文件。多亏了这些帮助,大家都很在行,但XML有一个更大的问题。遗憾的是,你不能把手表放在这些元素上,看哪一个元素坏了…@fullNelson是的,这就是我的意思,在你以后的过程中需要正确处理它。缺少的元素将为空,因此是否要指定默认值?过滤掉它们?要过滤掉这些属性,可以添加一个Where语句,将这些属性都不为空的元素保留下来。您可以使用null合并运算符指定空字符串或其他默认字符串,而不是null:Title=(string)item.Element(“Title”)??String.Empty。
文件。多亏了这些帮助,大家都很在行,但XML有一个更大的问题。遗憾的是,你不能把手表放在这些元素上,看哪一个元素坏了…@fullNelson是的,这就是我的意思,在你以后的过程中需要正确处理它。缺少的元素将为空,因此是否要指定默认值?过滤掉它们?要过滤掉这些属性,可以添加一个
Where
语句,将这些属性都不为空的元素保留下来。您可以使用null合并运算符指定空字符串或其他默认字符串,而不是null:Title=(string)item.Element(“Title”)??String.Empty
。这样做的好处是,您可以将其作为原始查询的一部分,而不是执行额外的迭代。谢谢,JohnD,有了这个简化的XML,它将正确运行,我在这里没有正确表示XML的其他方面,以便任何人都能清楚地了解可能的错误。再一次,我必须使用一个淡化的例子来说明我正在使用的XML的级别。谢谢,约翰,有了这个简化的XML,它将正确运行,我必须在这里正确表示XML的其他方面,以便任何人都能清楚地知道可能的错误。同样,我不得不使用一个淡化的示例来说明我正在使用的XML的级别。
<FEED>
<FEED_HEADER>
<FEED_NAME>foo</FEED_NAME>
<FEED_CODE>foobar123</FEED_CODE>
</FEED_HEADER>
<FEED_CONTENT>
<DOC>
<PUB_DATE>2011-12-01</PUB_DATE>
<TITLE>Monkey Bombs</TITLE>
</DOC>
<DOC>
<PUB_DATE>2011-12-10</PUB_DATE>
<TITLE>A Silly Hat</TITLE>
</DOC>
<DOC>
<PUB_DATE>2011-12-25</PUB_DATE>
<TITLE>Wind Blows Up My Skirt</TITLE>
</DOC>
</FEED_CONTENT>
</FEED>
public List<Review> GetReviews(string filePath, FileInfo file, DirectoryInfo directory, XElement xmlDoc)
{
IEnumerable<BookReview> reviews = null;
try
{
reviews = from item in xmlDoc.Descendants("DOC")
select new BookReview()
{
PubDate = item.Element("PUB_DATE").Value,
Title = item.Element("TITLE").Value,
};
}
catch (Exception ex)
{
logger.Info(string.Format("Error while parsing file {0}\n", file.Name) + " " + ex.Message.ToString());
}
return reviews.Cast<Review>().ToList();
}
reviews = from item in xmlDoc.Element("FEED_CONTENT").Descendants("DOC")
select new BookReview()
{
PubDate = item.Element("PUB_DATE").Value,
Title = item.Element("TITLE").Value
}
};
PubDate = (string)item.Element("PUB_DATE"),
Title = (string)item.Element("TITLE")
public class Review { }
public class BookReview : Review
{
public string PubDate;
public string Title;
}
public static void Main()
{
string xml = @"
<FEED>
<FEED_HEADER>
<FEED_NAME>foo</FEED_NAME>
<FEED_CODE>foobar123</FEED_CODE>
</FEED_HEADER>
<FEED_CONTENT>
<DOC>
<PUB_DATE>2011-12-01</PUB_DATE>
<TITLE>Monkey Bombs</TITLE>
</DOC>
<DOC>
<PUB_DATE>2011-12-10</PUB_DATE>
<TITLE>A Silly Hat</TITLE>
</DOC>
<DOC>
<PUB_DATE>2011-12-25</PUB_DATE>
<TITLE>Wind Blows Up My Skirt</TITLE>
</DOC>
</FEED_CONTENT>
</FEED>"; // NOTE: I closed the <FEED> element!
var xmlDoc = XDocument.Parse(xml);
IEnumerable<BookReview> reviews = null;
try
{
reviews = from item in xmlDoc.Descendants("DOC")
select new BookReview()
{
PubDate = item.Element("PUB_DATE").Value,
Title = item.Element("TITLE").Value,
};
}
catch (Exception ex)
{
//...
}
foreach (var review in reviews)
{
Console.WriteLine("{0}, {1}", review.PubDate, review.Title);
}
var reviews2 = reviews.Cast<Review>().ToList();
Console.ReadLine();
}
2011-12-01, Monkey Bombs
2011-12-10, A Silly Hat
2011-12-25, Wind Blows Up My Skirt