我需要阅读一些遵循ONIX标准的XML文件(请参阅:http://www.editeur.org/93/Release-3.0-Downloads/ )
为此,我下载了Onix3.0XSD:25.zip
使用下载的XSD和这个命令"xsd your.xsd /classes“,我创建了我想要使用的类。
当尝试创建新的Xml序列化程序时,如下所示:
var xmls = new XmlSerializer(typeof(Model.ONIX.editeur.ONIXMessage));我得到和例外
“反映‘Model.ONIX.edeur.ONIXMessage’类型的错误。”
当我深入研究内部异常时,我会得到以下信息:
“{”成员‘文本’不能使用XmlText属性进行编码。您可以使用XmlText属性对原语、枚举、字符串数组或XmlNode数组进行编码。
我不知道该怎么做,XSD有什么问题吗?有什么建议吗!
编辑
public static List<Model.ONIX.editeur.Product> GetProductsDataFromOnixFile(string onixFileLocation)
{
var xmls = new XmlSerializer(typeof(Model.ONIX.editeur.ONIXMessageRefname));
using (var reader = XmlReader.Create(onixFileLocation))
{
if (xmls.CanDeserialize(reader))
{
var onixMessage = (Model.ONIX.editeur.ONIXMessage)xmls.Deserialize(reader);
return onixMessage.Items.OfType<Model.ONIX.editeur.Product>().ToList();
}
throw new Exception(string.Format("Cant read the file {0} as Onix", onixFileLocation));
}
}发布于 2019-01-14 13:41:29
我知道这个问题已经很久了,但我想其他有特定Onix问题的人会遇到这个问题。
这是我怎么让它工作的。
在引用中,xsd中有两个包含在顶部。在这里,我复制/粘贴了另外两个文件。
<xs:include schemaLocation="ONIX_BookProduct_CodeLists.xsd" />
<xs:include schemaLocation="ONIX_XHTML_Subset.xsd" />也就是说,这些行在文件中被替换为相应的文件。
然后我做了
xsd ONIX_BookProduct_3.0_reference.xsd /classes然后生成.cs文件。这里唯一的问题是,我必须从所有字段(例如List147 )中删除一个文本属性,而不是从字符串字段中移除一个文本属性。例如,我必须从生成的代码中删除该属性,如下所示:
/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public List121 textscript {
get {
return this.textscriptField;但不是像这样的属性
/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string Value {
get {
return this.valueField;https://stackoverflow.com/questions/24648824
复制相似问题