XmlException与XmlStringReader vb.net
我试图用XmlStringReader解析错误的XML代码,就像下面这个XmlException与XmlStringReader vb.net,.net,xml,vb.net,xml-parsing,.net,Xml,Vb.net,Xml Parsing,我试图用XmlStringReader解析错误的XML代码,就像下面这个 <Page CODE=""L"" page Caption=""Example""><Cell CellType="0"...></Cell></Page> 因此,我得到了以下XmlException “Caption”是意外标记。所需的令牌为“=” 有没有办法避免这种例外情况?或者我应该在此之前解析xml以修复错误写入的属性 谢谢 我应该在此之前解析xml以修复错误写入的
<Page CODE=""L"" page Caption=""Example""><Cell CellType="0"...></Cell></Page>
因此,我得到了以下XmlException
“Caption”是意外标记。所需的令牌为“=”
有没有办法避免这种例外情况?或者我应该在此之前解析xml以修复错误写入的属性
谢谢
我应该在此之前解析xml以修复错误写入的属性吗
它不是XML。它看起来有点像XML,但实际上不是。不要尝试使用XMLAPI读取非XML。它将——也应该——失败
理想情况下,首先修复生成伪XML的任何问题
我应该在此之前解析xml以修复错误写入的属性吗
它不是XML。它看起来有点像XML,但实际上不是。不要尝试使用XMLAPI读取非XML。它将——也应该——失败
理想情况下,首先解决生成伪XML的问题。解析器的通用规则是,根据解析器编写的规范,它们假定输入是有效的。对于XML解析器,它假定您正在传递有效的XML代码进行解析 在本例中,您并不是因为XML不允许属性的名称中包含空格<代码>页面标题不是有效的属性标识符,因此解析器可能将
页面
解释为属性标识符,将空格视为分隔符,并考虑如何处理标题
但是,您不能只是“修复”异常。解析器完全混乱,正在放弃。即使你能以某种方式迫使它继续下去,也无法保证结果的有效性。这就像有人翻阅一本书,删除了所有的标点符号。你可能会沮丧地把它写下来,因为你无法理解它。但是如果有人强迫你去读,你很可能会经常得到错误的意思。解决此问题的唯一方法是向解析器提供其理解的输入
因此,是的,在通过解析器运行XML之前,您需要确保它是有效的。您从何处获取此XML?能否修复生成过程,使其使用有效标识符并正确符合XML模式 解析器的通用规则是,根据解析器编写的任何规范,它们都假定输入是有效的。对于XML解析器,它假定您正在传递有效的XML代码进行解析 在本例中,您并不是因为XML不允许属性的名称中包含空格<代码>页面标题不是有效的属性标识符,因此解析器可能将
页面
解释为属性标识符,将空格视为分隔符,并考虑如何处理标题
但是,您不能只是“修复”异常。解析器完全混乱,正在放弃。即使你能以某种方式迫使它继续下去,也无法保证结果的有效性。这就像有人翻阅一本书,删除了所有的标点符号。你可能会沮丧地把它写下来,因为你无法理解它。但是如果有人强迫你去读,你很可能会经常得到错误的意思。解决此问题的唯一方法是向解析器提供其理解的输入
因此,是的,在通过解析器运行XML之前,您需要确保它是有效的。您从何处获取此XML?能否修复生成过程,使其使用有效标识符并正确符合XML模式 是的,不是。我从数据库表中读取数据,而且我没有访问生成方法的权限,所以我认为另一种方法是用正则表达式对其进行解析。@HumbertoBarrientosGonzalez:我不会直接从XML跳到正则表达式。您可能需要编写一个自定义解析器,然后动态地将其转换为XML。不过,您需要尝试查找该格式的文档。是的,它不是。我从数据库表中读取数据,而且我没有访问生成方法的权限,所以我认为另一种方法是用正则表达式对其进行解析。@HumbertoBarrientosGonzalez:我不会直接从XML跳到正则表达式。您可能需要编写一个自定义解析器,然后动态地将其转换为XML。不过,您需要尝试查找该格式的文档。我正在从数据库表中读取。我不能,我正在编写转换为XML的代码,但我不知道这是不是最好的方法。我正在从数据库表中读取。我不能,我正在编写转换为XML的代码,但我不知道最好的方法是什么。
Using reader As XmlReader = XmlTextReader.Create(New StringReader(l.Label), New XmlReaderSettings With {
.ValidationType = ValidationType.None,
.XmlResolver = Nothing})
While (reader.ReadToFollowing("Cell"))
reader.MoveToAttribute("CellType")
Select Case Int32.Parse(reader.Value)
...
End Select
End While