0

我有一个 xml 文件,我想读取它,然后解释并转换为从 xsd 工具生成的各个类。以下是我正在尝试的步骤:

  1. 我创建了一个 XSD 文件。
  2. 将相应的 xsd 文件转换为相应的类集。
  3. 我通过同一组类(从步骤 2 开始)和 xmlserializer 制作了一些 xml 文件。
  4. 现在我正在从那些 xml 文件中读取,我不想将它转换为类(从第 2 步生成)

我正在粘贴到目前为止工作的代码,在反序列化时似乎出现异常,{“XML 文档中存在错误 (0, 0)。”}

            var doc = XDocument.Load(filePath);

        var query2 = from b in doc.Root.Descendants()
                     select b;

        foreach (var item in query2)
        {
            switch (item.Name.LocalName)
            {
                case "SomeStringValue": 
                    XmlSerializer srz = new XmlSerializer(typeof(SomeClassGeneratedfromXSD));
                    var writer=item.CreateReader();
                    parameterFromFile.SomeProperty = (SomeClassGeneratedfromXSD)srz.Deserialize(writer);
                    //srz.Deserialize(item);
                    break;

我正在粘贴我的 xsd 的片段:

<xs:complexType name="Parameters">
<xs:all>
  <xs:element name="A">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="mstns:Restricted8CharString">
          <xs:attribute name="Caption" use="required" fixed="Caption for A">
            <xs:simpleType>
              <xs:restriction base="xs:string"></xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="ActionWhenMaxReached" use="required">
            <xs:simpleType>
              <xs:restriction base="xs:short">
                <xs:pattern value="[1-3]"></xs:pattern>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="Expression" type="xs:string" default="0" />
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="B">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:short">
          <xs:attribute name="Caption" use="prohibited">
            <xs:simpleType>
              <xs:restriction base="xs:string"></xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="ActionWhenMaxReached" use="required">
            <xs:simpleType>
              <xs:restriction base="xs:short">
                <xs:pattern value="[1-3]"></xs:pattern>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="Expression" type="xs:string" default="0" />
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  </xs:all>
  </xs:complexType>
4

2 回答 2

0

您的结束标签不正确。它应该是:

</xs:complexType>

并不是

</xs:complexType name="Parameters">
于 2013-03-30T11:09:29.143 回答
0

经过努力,我找到了解决方案:

实际上我试图解析一个内部元素,这是不正确的;我已经有了 xsd 工具中的类,所以我可以简单地使用代码:

XmlSerializer serializer = new XmlSerializer(typeof(RootClass));
        using (TextReader reader = new StreamReader(filePath))
        {
            RootClass parameterFromFile = (RootClass)serializer.Deserialize(reader);
        }
于 2013-04-02T05:38:44.817 回答