我获得了一个XML文件和一个XSD文件。我正在尝试针对XSD验证XML,然后使用Serialization
将XML加载到对象中。
我的验证工作正常,但当我尝试DeserializeDocToObj
时,我收到以下错误。
There was an error deserializing the object of type
Aaa.Bbb.Common.DataTypes.SurveyGroup. Processing instructions
(other than the XML declaration) and DTDs are not supported.
Line 1, position 2.
我不知道这意味着什么,我读过的所有内容并没有真正起作用。
XSD中的标题:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.mydomain.co.uk/srm/mscc"
targetNamespace="http://www.mydomain.co.uk/srm/mscc"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="SurveyGroup">
XML中的标题
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="mscc4_cctv.xsl"?>
<SurveyGroup xmlns="http://www.mydomain.co.uk/srm/mscc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.mydomain.co.uk/srm/mscc
http://www.mydomain.co.uk/srm/schemas/mscc4_cctv.xsd">
<Survey>
反序列化代码:
public T DeserializeDocToObj(string fileLocation)
{
T returnObj;
using (FileStream reader = new FileStream(fileLocation, FileMode.Open, FileAccess.Read))
{
DataContractSerializer ser = new DataContractSerializer(typeof(T));
returnObj = (T)ser.ReadObject(reader);
}
return returnObj;
}
任何帮助非常感谢
答案 0 :(得分:1)
字符串<?xml-stylesheet type="text/xsl" href="mscc4_cctv.xsl"?>
是处理指令。您的软件告诉您它无法处理其输入中的处理指令。这意味着您的软件似乎不是XML解析器;您需要将输入限制为它可以处理的XML子集,或者获得真正的解析器。
答案 1 :(得分:1)
Create XmlReader
XmlReaderSettings
并使用DataContractSerializer
ReadObject(XmlReader)
。DataContractSerializer
代替ReadObject(Stream)
。XmlReader
:< / p>
using (var reader = XmlReader.Create(fileName, new XmlReaderSettings { IgnoreProcessingInstructions = true }))
{
var serializer = new DataContractSerializer(typeof(T));
return (T)serializer.ReadObject(reader);
}
DataContractSerializer
使用的Read(Stream)
。IgnoreProcessingInstructions
不DataContractSerializer
。 Read(Stream)
。XmlDictionaryReader
拨打CreateTextReader
。source(请参阅XmlUTF8TextReader
)创建source(请参阅XmlReaderSettings
)不接受processing instructions。
显然,默认行为是废话(未知)C.M. Sperberg-McQueen。字符串<?xml-stylesheet type="text/xsl" href="mscc4_cctv.xsl"?>
是states {{3}}处理指令。