Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XmlException与XmlStringReader vb.net_.net_Xml_Vb.net_Xml Parsing - Fatal编程技术网

XmlException与XmlStringReader vb.net

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以修复错误写入的

我试图用XmlStringReader解析错误的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