use*_*648 38 c# xml xsd xmlreader character-encoding
我正在用XSD编写XML验证器.
以下是我所做的,但当验证器到达该行时,while (list.Read())
它会给我错误
没有Unicode字节顺序标记.无法切换到Unicode.
任何人都可以帮我解决这个问题吗?
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
<?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>
Run Code Online (Sandbox Code Playgroud)
<?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>
Run Code Online (Sandbox Code Playgroud)
kjh*_*hes 67
文件编码的实际情况似乎与XML声明指定的内容冲突.如果您的文件实际上使用单字节字符,则声明encoding="utf-16"
不会将其更改为使用双字节字符,例如.
尝试从XML声明中删除冲突的编码.更换
<?xml version="1.0" encoding="utf-16"?>
Run Code Online (Sandbox Code Playgroud)
同
<?xml version="1.0"?>
Run Code Online (Sandbox Code Playgroud)
您也可以使用LoadXML()将文件加载到字符串中作为解决方法.
归档时间: |
|
查看次数: |
41572 次 |
最近记录: |