【问题标题】:The XmlReader state should be InteractiveXmlReader 状态应该是 Interactive
【发布时间】:2014-10-30 03:51:33
【问题描述】:

我正在尝试将 xml 加载到 XDocument 对象中。

public void ValidateRules(XmlReader xml)
{
    xml.MoveToContent();
    XDocument xDoc = new XDocument();
    xDoc = XDocument.Load(xml);
}

但是,我不断收到错误消息“XmlReader 状态应该是交互式”。我为此寻找了解决方法,并在顶部添加了 MoveToContent() 方法(正如前面提到的,这会将 ReadState 更改为 Interactive),但它没有用。 ReadState 是只读的,我无法更改值。

这里有什么问题?

附:我试图加载的 XML 文件有一个 DTD 引用。它存在于与 XML 相同的路径中。不知道这有没有意义。

【问题讨论】:

标签: c# linq-to-xml


【解决方案1】:

鉴于你的函数的签名,你可以这样做:

var xDoc = XDocument.Parse(xml.ReadOuterXml());

或者,如果您的设计不需要它,请不要使用XmlReader - 如果您显示的代码之外的某些东西不需要它,您可以跳过额外的抽象层并简单地使用:

var xDoc = XDocument.Load(PATH_TO_YOUR_FILE);

var xDoc = XDocument.Parse(YOUR_XML_STRING);

【讨论】:

  • 我试过这段代码。但看起来它不查找我在 xml 中引用的 DTD。它给了我以下错误:-“引用未声明的实体'副本'。第 17 行,第 8 位”。 'copy' 是在 DTD 中定义的实体。
  • @AshwinPrabhu 究竟是哪个代码?这些是 3 个不同的代码行。您能否也发布您的 xml 以供参考?
【解决方案2】:

XML 数据是 null 尝试通过阅读器读取。 reader 的 ReadState 情况将是 Initial 或 EndOfFile (https://msdn.microsoft.com/en-us/library/fxtcxd31.aspx)

public void ValidateRules(XmlReader reader)
{
    XDocument xDoc = XDocument.Load(reader);
}

【讨论】:

    猜你喜欢
    • 2011-08-26
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多