gpt4 book ai didi

c# - XML 阅读器 : how to catch syntax errors in the xml file?

转载 作者:数据小太阳 更新时间:2023-10-29 02:11:38 24 4
gpt4 key购买 nike

我有一个语法错误的 XML 文件。例如。

<Viewport thisisbad Left="0" Top="0" Width="1280" Height="720" >

当我创建一个 XML 阅读器时,它不会抛出任何错误。我有办法像 XMLDocument 一样自动进行语法检查吗?

我已经尝试设置各种 XmlReaderSettings 标志,但没有发现任何有用的东西。

最佳答案

要使用 XmlReader 检查 XML 文档是否格式良好,您必须实际阅读该文档。

在 C# 中,这样做:

var txt = "<Viewport thisisbad Left='0' Top='0' Width='1280' Height='720' >";
XmlReader reader = XmlReader.Create(new StringReader(txt));
while (reader.Read()) { }

我运行该代码得到的结果是:

Exception: System.Xml.XmlException: 'Left' is an unexpected token. The expected token is '='. Line 1, position 21.
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
at System.Xml.XmlTextReaderImpl.ThrowUnexpectedToken(String expectedToken1, String expectedToken2)
at System.Xml.XmlTextReaderImpl.ParseAttributes()
at System.Xml.XmlTextReaderImpl.ParseElement()
at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
at System.Xml.XmlTextReaderImpl.Read()

无需管理元素堆栈,如 another answer 中所建议的那样. XmlReader 为您完成。

你写道:

When i create an XML reader it does not throw any errors. I there a way to do syntax checking automatically, like XMLDocument does ?

要认识到的关键是 XmlReader 是一个读取 xml 的对象。如果你只是创建它,它还没有读取任何 xml,所以它当然不能告诉你 xml(它还没有读取)是否有效。

要快速检查 XML 的语法或格式良好,请调用 XmlReader 上的 Read() 直到它返回 null。它会为你做检查。但是,请注意,一旦您这样做了,XmlReader 就位于文档的末尾。您需要重置才能实际读取和检查 xml 的内容。我见过的大多数应用程序都同时执行这两项操作。换句话说,应用程序检查内容,并将您所说的“语法检查”委托(delegate)给读者:

XmlReader reader = XmlReader.Create(sr);
while (reader.Read()) // will throw if not well-formed
{
switch (reader.NodeType)
{
case XmlNodeType.XmlDeclaration:
...
break;
case XmlNodeType.Element:
...
break;
case XmlNodeType.Text:
...
break;
...
}
}

关于c# - XML 阅读器 : how to catch syntax errors in the xml file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2786495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com