2

我需要阅读一些遵循 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 序列化器时:

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));
        }
    }
4

1 回答 1

2

我知道这个问题很老,但我认为其他有特定 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;
于 2019-01-14T13:41:29.687 回答