c# xml character-encoding xsd xmlreader

c# - No hay una marca de orden de bytes Unicode. No se puede cambiar a Unicode



xml character-encoding (1)

Estoy escribiendo un validador de XML con XSD.

A continuación se muestra lo que hice, pero cuando el validador llegó a la línea while (list.Read()) me da el error

No hay una marca de orden de bytes Unicode. No se puede cambiar a Unicode.

¿Alguien puede ayudarme a arreglarlo?

public class Validator { public void Validate(string xmlString) { Boolean bRet = true; string xmlPath = @"C:/x.xml"; string xsdPath = @"C:/general.xsd"; XmlReaderSettings Settings = new XmlReaderSettings(); Settings.Schemas.Add("", xsdPath); Settings.ValidationType = ValidationType.Schema; Settings.ValidationEventHandler += new ValidationEventHandler(SettingsValidationEventHandler); XmlReader list = XmlReader.Create(xmlPath, Settings); //StringBuilder output = new StringBuilder(); while (list.Read()) { } //File.WriteAllText(@"D:/Output.xml", output.ToString()); } static void SettingsValidationEventHandler(object sender, ValidationEventArgs e) { if (e.Severity == XmlSeverityType.Warning) { MessageBox.Show( "WARNING: "); MessageBox.Show(e.Message); } else if (e.Severity == XmlSeverityType.Error) { MessageBox.Show("ERROR: "); MessageBox.Show(e.Message); } } }

XML

<?xml version="1.0" encoding="utf-16"?> <FlashList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" vin="xxxxxxxxxxxxx"> <flash ECUtype="xxx" /> </FlashList>

XSD

<?xml version="1.0" encoding="utf-16"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="FlashList"> <xs:complexType> <xs:sequence> <xs:element name="flash" maxOccurs="unbounded" minOccurs="0"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute type="xs:string" name="ECUtype" use="optional"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="Error" maxOccurs="unbounded" minOccurs="0"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute type="xs:byte" name="code" use="optional" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute type="xs:string" name="vin"/> </xs:complexType> </xs:element> </xs:schema>


La realidad de la codificación de su archivo parece estar en conflicto con la especificada por su declaración XML. Si su archivo realmente usa caracteres de un byte, declarar encoding="utf-16" no lo cambiará para usar caracteres de dos bytes, por ejemplo.

Intente eliminar la codificación conflictiva de la declaración XML. Reemplazar

<?xml version="1.0" encoding="utf-16"?>

con

<?xml version="1.0"?>

También puede cargar el archivo en una cadena como solución alternativa utilizando LoadXML ().