想必這一切都有效,直到它被截斷......所以使用XmlReader
可以工作...只是準備當它到達截斷點時處理它。
現在XmlReader
API並不十分愉快(IMO),所以你可能要轉移到一些有趣的數據的開始(這必須是本身可完成),然後調用XNode.ReadFrom(XmlReader)
方法來獲取該數據一個簡單易用的表單。然後移動到下一個元素的開始,做同樣的,等
示例代碼:
using System;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
using (XmlReader reader = XmlReader.Create("test.xml"))
{
while (true)
{
while (reader.NodeType != XmlNodeType.Element ||
reader.LocalName != "Child")
{
if (!reader.Read())
{
Console.WriteLine("Finished!");
}
}
XElement element = (XElement) XNode.ReadFrom(reader);
Console.WriteLine("Got child: {0}", element.Value);
}
}
}
}
示例XML:
<Root>
<Parent>
<Child>First child</Child>
<Child>Second child</Child>
<Child>Broken
輸出示例:
了孩子:第一個孩子 有孩子:第二個孩子
Unhandled Exception: System.Xml.XmlException: Unexpected end of file has occurred
The following elements are not closed: Child, Parent, Root. Line 5, position 18.
at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
at System.Xml.XmlTextReaderImpl.ParseElementContent()
at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r)
at System.Xml.Linq.XContainer.ReadContentFrom(XmlReader r, LoadOptions o)
at System.Xml.Linq.XElement.ReadElementFrom(XmlReader r, LoadOptions o)
at System.Xml.Linq.XNode.ReadFrom(XmlReader reader)
at Program.Main(String[] args)
所以,很顯然,你會想捕獲異常,但你可以看到,它成功地正確讀取前兩個元素。
從技術上講,帶有未封閉標籤的XML不是XML,就像VB不是C#一樣。 – 2012-03-14 14:30:51
你試過XmlReader嗎?這是最多(唯一)寬容的閱讀方式。 – 2012-03-14 14:30:52
此鏈接可能會有所幫助。 HTTP://計算器。COM /問題/ 9681084 /最容易的方式去除的,無效字符,從-A-XML的文件/ 9681642#9681642 – 2012-03-14 14:34:27