我有一个XML文件,其中一个节点有足够的信息,只要我一次尝试直接读取它的值,就可以得到OutOfMemoryException
。除了从外部服务从数据库导出数据的文件外,我不控制此节点值的大小,并且它随时可以更大。
所以我拥有的是这样的:
<ROOT>
<MODULE>
<ROW>
<PROPERTY1>
.....
</PROPERTY1>
.....
<DATA>
ENOUGH_LARGE_DATA_TO_GET_ME_AN_OUTOFMEMORYEXCEPTION_WHICH_CAN_BE_LARGER_AND_LARGER
</DATA>
</ROW>
</MODULE>
....
</ROOT>
我正在做这样的事情,以便通过块读取XML文件:
public static IEnumerable<XElement> ElementsNamed(this XmlReader reader, string elementName)
{
reader.MoveToContent(); // will not advance reader if already on a content node; if successful, ReadState is Interactive
reader.Read(); // this is needed, even with MoveToContent and ReadState.Interactive
while(!reader.EOF && reader.ReadState == ReadState.Interactive)
{
if(reader.NodeType == XmlNodeType.Element)
{
if(reader.Name.Equals(elementName))
{
// this advances the reader...so it's either XNode.ReadFrom() or reader.Read(), but not both
var matchedElement = XNode.ReadFrom(reader) as XElement;
if(matchedElement != null)
yield return matchedElement;
}
}
else
reader.Read();
}
}
我的问题是XNode.ReadFrom
读取节点中的所有值,此时我无法通过块读取此值。
答案 0 :(得分:0)
我不会将其视为XML,我会将其视为常规文本文件并使用StreamReader来读取它。
试试这个:http://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.readchars%28v=vs.110%29.aspx