Ошибка: - Состояние XmlReader должно быть интерактивным на XDocument.Load - PullRequest
12 голосов
/ 16 мая 2011

Я получаю следующую ошибку: -

System.InvalidOperationException: состояние XmlReader должно быть Интерактивным.в System.Xml.Linq.XContainer.ReadContentFrom (XmlReader r, LoadOptions o) в System.Xml.Linq.XDocument.Load (чтение XmlReader, параметры LoadOptions)

в следующем коде.Кто-нибудь может указать мне, что я здесь делаю неправильно?

static XDocument GetContentAsXDocument(string xmlData)
{
    XmlDocument xmlDocument = new XmlDocument();
    if (!string.IsNullOrEmpty(xmlData))
    {
        xmlDocument.LoadXml(xmlData);
        return xmlDocument.ToXDocument();
    }
    else
    {
        return new XDocument();
    }
}


/// <summary>
///  Converts XMLDocument to XDocument
/// </summary>
/// <param name="xmlDocument"></param>
/// <returns></returns>
public static XDocument ToXDocument( this XmlDocument xmlDocument )
{
    using( var nodeReader = new XmlNodeReader( xmlDocument ) )
    {
        nodeReader.MoveToContent();
        return XDocument.Load(
             nodeReader,
            (LoadOptions.PreserveWhitespace |
             LoadOptions.SetBaseUri |
             LoadOptions.SetLineInfo));
    }
}

1 Ответ

3 голосов
/ 23 октября 2012

Вы должны использовать XDocument.Parse и XmlDocument.OuterXml .См. Пример ниже.

public static XDocument ToXDocument( this XmlDocument xmlDocument )
{
    string outerXml = xmlDocument.OuterXml;
    if(!string.IsNullOrEmpty(outerXml))
    {
        return XDocument.Parse(outerXml, (LoadOptions.PreserveWhitespace |
             LoadOptions.SetBaseUri |
             LoadOptions.SetLineInfo));
    }
    else
    {
        return new XDocument();
    }
}

Другие методы преобразования из XmlDocument в XDocument можно найти здесь .

...