我有一个XmlDocument
,可以使用XmlNode
遍历它,或将其转换为XDocument
并通过LINQ遍历。
<Dataset>
<Person>
<PayrollNumber>1234567</PayrollNumber>
<Surname>Smith-Rodrigez</Surname>
<Name>John-Jaime-Winston Junior</Name>
<Skills>
<Skill>ICP</Skill>
<Skill>R</Skill>
</Skills>
<HomePhone>08 8888 8888</HomePhone>
<MobilePhone>041 888 999</MobilePhone>
<Email>curly@stooge.com</Email>
</Person>
<Person>
<PayrollNumber>12342567</PayrollNumber>
<Surname>Smith-Rodrigez</Surname>
<Name>Steve</Name>
<Skills>
<Skill>Resus</Skill>
<Skill>Air</Skill>
</Skills>
<HomePhone>08 8888 8888</HomePhone>
<MobilePhone>041 888 999</MobilePhone>
<Email>curly@stooge.com</Email>
</Person>
</Dataset>
问题1
我想将XML中的Person记录/节点转换为业务实体对象(POCO)。
因此,我必须一次迭代一个Person节点,然后解析单个值。这最后一部分本身就很有趣,但首先我必须获取实际的Person记录。我的问题是,如果我按个别节点选择(例如在XmlDocoment
中使用XmlList
),则会聚合所有字段名称。我担心这样做,因为如果其中一个人节点不完整,甚至缺失,那么当我通过并将字段聚合到业务对象中时,我就不知道哪个字段缺失了。我将尝试验证-请参见问题2。
我意识到可以通过反射来完成这项工作,但我很感兴趣。
我尝试通过Person对象进行迭代:
选项1:
foreach (XObject o in xDoc.Descendants("Person"))
{
Console.WriteLine("Name" + o);
// [...]
}
这里有两个人员记录(正确的),每个记录都是一个完整的XML文档字符串化格式,仅为上述XML文档的子集。现在如何将记录拆分成单独的节点或字段,最好不要让此过程过于痛苦?
选项2:
foreach (XElement element in xDoc.Descendants("Person"))
{
// [...]
}
这会为我获取每个人的XML节点值,全部组成一个字符串,例如:
1234567Smith-RodrigezJohn-Jaime-Winston JuniorLevel 5, City Central Tower 2, 121 King William StNorth Adelaide 5000ICPR08 8888 8888041 888 999111111curly@stooge.comE
但是,它并没有什么用处。
问题2
我可以很容易地验证一个 XDocument
,MSDN上有一些很好的例子,但我想知道如何标记错误记录。理想情况下,我希望能够过滤出好的记录到一个新的 XDocument
中,并在原来的文档中留下不良记录。这可能吗?
}
- MtTumbledown