错误: - XmlReader状态应该是XDocument.Load上的Interactive

时间:2011-05-16 15:56:55

标签: c# xml linq-to-xml xmldocument

我收到以下错误: -

  

System.InvalidOperationException:The   XmlReader状态应该是Interactive。   在   System.Xml.Linq.XContainer.ReadContentFrom(的XmlReader   r,LoadOptions o)at   System.Xml.Linq.XDocument.Load(的XmlReader   reader,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 个答案:

答案 0 :(得分:3)

您应该使用XDocument.ParseXmlDocument.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();
    }
}

converting from XmlDocument to XDocument can be found here的其他方法。