按块读取XML节点值

时间:2013-11-25 10:15:38

标签: c# xml

我有一个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读取节点中的所有值,此时我无法通过块读取此值。

1 个答案:

答案 0 :(得分:0)

我不会将其视为XML,我会将其视为常规文本文件并使用StreamReader来读取它。

试试这个:http://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.readchars%28v=vs.110%29.aspx