1

我有一个建模如下的 XML 文件:

<data>
    <customer>
        <id></id>
        <name></name>
        <model>
            <id></id>
            <name></name>
            <item>
                <id></id>
                <history>
                    <date></date>
                    <location></location>
                </history>
            </item>
            <item>
                <id></id>
                <history>
                    <date></date>
                    <location></location>
                </history>
            </item>
        </model>
        <model>
            <id></id>
            <name></name>
            <item>
                <id></id>
                <history>
                    <date></date>
                    <location></location>
                </history>
            </item>
        </model>
    </customer>
    <customer>
        <id></id>
        <name></name>
        <model>
            <id></id>
            <name></name>
            <item>
                <id></id>
                <history>
                    <date></date>
                    <location></location>
                </history>
            </item>
            <item>
                <id></id>
                <history>
                    <date></date>
                    <location></location>
                </history>
            </item>
        </model>
    </customer>
    <customer>
        <id></id>
        <name></name>
    </customer>
</data>

在 C# 中使用 XPath,我需要为每个客户访问以下内容:

customer/id
customer/name
customer/model/id
customer/model/name
customer/model/item/id
customer/model/item/history/date
customer/model/item/history/location

当任何给定客户的数据不存在时,存储的结果将为空,因为必须填充我的客户对象的所有字段。如果 XML 文件是统一的,这将很容易。我的问题是当每个客户可能有不同数量的模型和项目节点时访问每个客户的数据。有任何想法吗?

4

1 回答 1

1

假设结果将包含这些类型的对象:

Customer, Model, Item and History

填充它们的伪代码是:

  1. 选择所有/data/customer元素

  2. 对于 1. 中选择的每个节点,请执行以下操作:

  3. 选择./id./name填充对象的相应属性。

  4. 从当前元素的所有子元素中填充一个List<Model>属性:modelcustomer

  5. 选择./model当前元素的所有子元素。

  6. 对于 5. 中的每个选定model元素,创建一个模型对象并填充其属性:

  7. 对于当前模型对象,通过选择当前元素的子./id元素来填充其 Id 和 Name 属性。./namemodel

  8. 从当前元素的所有子元素中填充一个List<Item>属性:itemmodel

  9. 选择./item当前元素的所有子元素。

  10. 对于当前 Item 对象,通过选择./id当前item元素的子元素来填充其 Id 属性。

  11. 以类似的方式,使用 History 对象填充 Item 对象的 History 属性,该对象是从./history当前item元素的子元素创建和填充的。

当然,如果你使用 XML 序列化,你可以跳过所有这些——在这里阅读:http: //msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

于 2012-09-16T16:03:19.893 回答