我正在用 XSD 编写一个 XML 验证器.
I am writing an XML validator with XSD.
下面是我所做的,但是当验证器到达 while (list.Read()) 行时,它给了我错误
Below is what I did, but when the validator reached the line while (list.Read()) it gives me the error
没有Unicode字节顺序标记.无法切换到 Unicode.
There is no Unicode byte order mark. Cannot switch to 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);
}
}
}
<?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>
<?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>
您的文件编码的实际情况似乎与您的 XML 声明所指定的相冲突.例如,如果您的文件实际上使用一字节字符,则声明 encoding="utf-16" 不会将其更改为使用两字节字符.
The reality of your file's encoding appears to conflict with that specified by your XML declaration. If your file actually uses one-byte characters, declaring encoding="utf-16" won't change it to use two-byte characters, for example.
尝试从 XML 声明中删除冲突的编码.替换
Try removing the conflicting encoding from the XML declaration. Replace
<?xml version="1.0" encoding="utf-16"?>
与
<?xml version="1.0"?>
您也可以使用 LoadXML() 将文件加载到字符串中作为解决方法.
You may also be able to load the file into a string as a work-around using LoadXML().
这篇关于没有 Unicode 字节顺序标记.无法切换到 Unicode的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
如何在条件下使用 RemoveAll 删除列表中的多个项目How to Remove multiple items in List using RemoveAll on condition?(如何在条件下使用 RemoveAll 删除列表中的多个项目?)
转换表达式树Convert Expression trees(转换表达式树)
当 IDENTITY_INSERT 设置为 OFF 时,无法为表“ClientCannot insert explicit value for identity column in table #39;ClientDetails#39; when IDENTITY_INSERT is set to OFF(当 IDENTITY_INSERT 设置为 OFF 时,
Linq 独特的 &最大限度Linq distinct amp; max(Linq 独特的 amp;最大限度)
使用 LinqPad 将字符串转换为 GuidCast string as Guid using LinqPad(使用 LinqPad 将字符串转换为 Guid)
Linq order by 在 select { } 中聚合Linq order by aggregate in the select { }(Linq order by 在 select { } 中聚合)