我需要阅读一些遵循ONIX标准的XML文件 请参阅:http://www.editeur.org/93/Release-3.0-Downloads/
要做到这一点,我下载了ONIX 3.0 XSD: http://www.editeur.org/files/ONIX%203/ONIX_BookProduct_XSD_schema+codes_Issue_25.zip
使用下载的XSD和此命令“xsd your.xsd / classes”我创建了我想要使用的类。
尝试创建一个新的Xml Serializer时:
var xmls = new XmlSerializer(typeof(Model.ONIX.editeur.ONIXMessage));
我得到和例外
“反映出类型为'Model.ONIX.editeur.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));
}
}
答案 0 :(得分:1)
我知道这个问题很旧,但是我想其他人会遇到特定的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;