Zusammenführen von XML-Dateien mit externen Einheiten in Visual Studio 2008
-
20-08-2019 - |
Frage
Ich habe einige XML-Daten in drei Dateien enthalten (Database.xml, Participants.xml und ConditionTokens.xml). Ich versuche, externe Stellen zu verwenden, um die Teilnehmer und den Zustand Token in die Datenbankdatei zu platzieren, aber wenn ich diesen Code ausführen ...
string xmlPath = Environment.CurrentDirectory + @"\Data\Database.xml";
XElement database = XElement.Load(xmlPath);
... gibt es keine Teilnehmer oder Bedingung Token in meinem xml (die HasElements Eigenschaft für „Datenbank“ ist falsch). Es sollte zwei untergeordnete Elemente sein. Ich erhalte keine Fehler / Warnungen in Visual Studio (2008) und die Live-Schema-Validierung scheint glücklich zu sein, aber etwas ist nicht ganz richtig, wenn ich meinen Code ausführen.
Kann mir jemand sagen, was ich falsch mache?
Ich habe klebte die drei XML-Dateien unter.
Vielen Dank!
-Dan
Database.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE database [
<!ENTITY conditionTokens SYSTEM "ConditionTokens.xml">
<!ENTITY participants SYSTEM "Participants.xml">]>
<database
xmlns="experimentManager"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="experimentManager Database.xsd">
&conditionTokens;
&participants;
</database>
ConditionTokens.xml
<?xml version="1.0" encoding="utf-8" ?>
<conditionTokens>
<conditionToken>
<id>1</id>
<token>LargeToSmall</token>
</conditionToken>
<conditionToken>
<id>2</id>
<token>SmallToLarge</token>
</conditionToken>
</conditionTokens>
Participants.xml
<?xml version="1.0" encoding="utf-8" ?>
<participants>
<participant>
<id>1</id>
<conditionTokenId>1</conditionTokenId>
</participant>
<participant>
<id>2</id>
<conditionTokenId>2</conditionTokenId>
</participant>
</participants>
Lösung 2
Ich landete mit <xs:redefine>
statt.
Andere Tipps
ich das XmlDocument hätte Klasse verwendet, um die drei Dokumente zu laden
XmlDocument xmlDatabase = new XmlDocument();
xmlDatabase.Load(databasePath);
XmlDocument xmlTokens = new XmlDocument();
xmlTokens.Load(tokensPath);
XmlDocument xmlParticipants = new XmlDocument();
xmlParticipants.Load(participantsPath);
Dann mit dem ImportNode und appendnode befestigen dann miteinander ...
xmlDatabase.FirstChild.AppendNode(xmlDatabase.ImportNode(xmlTokens.FirstChild), true);
xmlDatabase.FirstChild.AppendNode(xmlDatabase.ImportNode(xmlParticipants.FirstChild), true);
Das sollte so ziemlich tut es (oder anstelle der Verwendung von Firstchild einen XPath-Selektor verwenden?)