Ich habe eine XmlDocument
die ich mit XmlNode
oder konvertieren Sie sie in eine XDocument
und durchlaufen es über 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>
Frage 1
Ich möchte die Personendatensätze/Knoten im XML in ein Business Entity Object (POCO) konvertieren. Dazu muss ich jeweils einen Personenknoten durchlaufen und dann die einzelnen Werte analysieren. Dieser letzte Teil ist an sich schon interessant, aber zuerst muss ich die eigentlichen Personendatensätze abrufen. Das Problem, das ich habe, ist, dass ich, wenn ich nach einzelnen Knoten selektiere (z. B. mit XmlList
en XmlDocoment
).
Am Ende werden alle Felder nach Namen aggregiert. Ich bin besorgt, dies für den Fall zu tun, dass einer der Personenknoten unvollständig ist oder sogar fehlt, und dann werde ich nicht wissen, welcher fehlt, wenn ich durchlaufe und die Felder zu Geschäftsobjekten aggregiere. Ich werde versuchen, die Daten zu validieren - siehe Frage 2.
Mir ist klar, dass dies durch Nachdenken erreicht werden kann, aber ich bin interessiert.
Ich habe versucht, nach Person-Objekten zu iterieren:
Opción 1:
foreach (XObject o in xDoc.Descendants("Person"))
{
Console.WriteLine("Name" + o);
// [...]
}
Auf diese Weise erhalte ich 2 (korrekte) Personendatensätze, jeweils ein vollständiges, als XML-Dokument formatiertes Dokument. Nur eine Teilmenge des obigen XML-Dokuments.
Doch wie lässt sich der Datensatz nun in einzelne Knoten oder Felder aufteilen - am besten so schmerzlos wie möglich?
Opción 2:
foreach (XElement element in xDoc.Descendants("Person"))
{
// [...]
}
So erhalte ich die XML-Knoten - nur die Werte - für jede Person in einer einzigen Zeichenfolge, z. B.
1234567Smith-RodrigezJohn-Jaime-Winston JuniorLevel 5, City Central Tower 2, 121 King William StNorth Adelaide 5000ICPR08 8888 8888041 888 999111111curly@stooge.comE
Auch hier kein großer Nutzen.
Frage 2
Ich kann eine Validierung XDocument
ganz einfach, es gibt einige gute Beispiele auf MSDN, aber ich würde gerne wissen, wie ich einen falschen Datensatz markieren kann. Im Idealfall möchte ich die guten Datensätze in eine neue Datei filtern können. XDocument
und lassen die alten zurück. Ist dies möglich?