我有一个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
当任何给定客户的数据不存在时,存储的结果将为null,因为必须填充客户对象的所有字段。如果XML文件是统一的,这将很容易。我的问题是当每个客户可能具有不同数量的模型和项目节点时访问每个客户的数据。有什么想法吗?
答案 0 :(得分:1)
假设结果将包含以下类型的对象:
Customer, Model, Item and History
填充它们的伪代码是:
选择所有/data/customer
元素
对于1. do:
选择./id
和./name
并填充对象的相应属性。
填充当前List<Model>
元素的所有model
子项的customer
属性:
选择当前元素的所有./model
子项。
对于5.中的每个选定的model
元素,创建一个Model对象并填充其属性:
对于当前的Model对象,通过选择当前./id
元素的./name
和model
子元素来填充其Id和Name属性。
填充当前List<Item>
元素的所有item
子项的model
属性:
选择当前元素的所有./item
子项。
对于当前Item对象,通过选择当前./id
元素的item
子元素来填充其Id属性。
以类似的方式使用History对象填充Item对象的History属性,您可以从当前./history
元素的item
子级创建和填充。
当然,如果您使用XML序列化,则可以跳过所有这些 - 请在此处阅读:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx