Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo zusammen,

ich habe einen TreeView:


Broker

-OrderTypes

--Exchange

---Limit

---usw.

ich suche nun eine Möglichkeit, wenn ich den Knoten Exchange makiere, dass er mir diesen, mit allen Unterknoten kopiert und unterhalb hinzufügt. Sprich, dass es dann so aussieht:

Broker

-OrderTypes

--Exchange

---Limit

---usw.

--Exchange

---Limit

---usw.

Das kopieren habe ich schon hinbekommen funktioniert auch soweit, bloß wie füge ich das ganz jetzt noch unterhalb ein?? Das Kopieren habe ich folgendermaßen gelöst:

XmlDocument doc = new XmlDocument();

doc.Load(AktuellGeladeneDatei.Text);

//ab markiertem Knoten kopieren

XmlNode root = doc.SelectSingleNode(markierterPfad.Text);

//Eine Kopie mit CloneNode erstellen

XmlNode deep = root.CloneNode(true);

tBXML.Text = deep.OuterXml;

Gibt es da eine Möglichkeit?

Ich hoffe mir kann jemand helfen.

Ein Beispiel wäre natürlich auch supi.

Danke schonmal!!

Geschrieben

Vielen dank für die schnelle Antwort!!

...hat super geklappt!

Jetzt habe ich nur noch folgedes Problem.

Ich habe das ganze jetzt wie folgt gelöst:


XmlDocument doc = new XmlDocument();

doc.Load(AktuellGeladeneDatei.Text);

XmlNode objRoot = doc.DocumentElement;

string strXmlQuery = markierterPfad.Text;

XmlNode objToBeCloned = objRoot.SelectSingleNode(strXmlQuery);

XmlNode objNewNode = objToBeCloned.CloneNode(true);

objRoot.InsertAfter(objNewNode, objRoot.LastChild);

doc.Save(AktuellGeladeneDatei.Text);

Meine Struktur sieht so aus:

BrokerDef

-Broker

--OrderTypes

---Exchange

----Limit

----Stop

----usw.

Ich kopiere nun den kompletten Exchange-Block. Aber das Programm fügt mir den kopierten Exchange-Block so ein:

BrokerDef

-Broker

--OrderTypes

---Exchange

----Limit

----Stop

----usw.

-Exchange

--Limit

--Stop

--usw.

Der kopierte Exchange-Block soll aber unter den ersten kommen.

Vll. kann mir da noch jemand helfen.

Wäre echt supi.

Danke schon mal!

Geschrieben
objRoot.SelectSingleNode(strXmlQuery).parent

Ich glaube du hast mich etwas falsch verstanden. (bzw. hab ich mich vll. etwas falsch ausgedrückt:))

Wenn ich diese Zeile so änder, dann kopiert er mir nicht den markierten Knoten sondern den übergeordneten.

Ich versuch das Problem nochmal etwas deutlicher zu erklären.

Mein XML-Aufbau:


<BrokerDef>

  <Broker>

    <OrderTypes>

      <Exchange>

        <LIMIT>WERT</LIMIT>

        <STOP>WERT</STOP>

        <...>

      </Exchange>

    </OrderTypes>

  </Broker>

</BrokerDef>

Nun führe ich diesen Code aus:

XmlDocument doc = new XmlDocument();

doc.Load(AktuellGeladeneDatei.Text);

XmlNode objRoot = doc.DocumentElement;

string strXmlQuery = markierterPfad.Text;

XmlNode objToBeCloned = objRoot.SelectSingleNode(strXmlQuery);

XmlNode objNewNode = objToBeCloned.CloneNode(true);

objRoot.InsertAfter(objNewNode, objRoot.LastChild);

doc.Save(AktuellGeladeneDatei.Text);

Nun sollte es eigentlich so dastehen:

<BrokerDef>

  <Broker>

    <OrderTypes>

      <Exchange>

        <LIMIT>WERT</LIMIT>

        <STOP>WERT</STOP>

        <...>

      </Exchange>

      <Exchange>

        <LIMIT>WERT</LIMIT>

        <STOP>WERT</STOP>

        <...>

      </Exchange>

    </OrderTypes>

  </Broker>

</BrokerDef>

Aber im Moment wird es mir so ausgegeben:

<BrokerDef>

  <Broker>

    <OrderTypes>

      <Exchange>

        <LIMIT>WERT</LIMIT>

        <STOP>WERT</STOP>

        <...>

      </Exchange>

    </OrderTypes>

  </Broker>

  <Exchange>

    <LIMIT>WERT</LIMIT>

    <STOP>WERT</STOP>

    <...>

  </Exchange>

</BrokerDef>

Ich glaube das Problem liegt in dieser Zeile:

objRoot.InsertAfter(objNewNode, objRoot.LastChild);

da hier ja der Ort angegeben wird, wo das kopierte eingefügt werden soll.

Ich habe schon alle möglichen Kombinationen ausprobiert, aber keine funktioniert.

Ich hoffe jetzt ist mein Problem etwas klarer geworden.

Geschrieben

Also...

objRoot.InsertAfter(objNewNode, objRoot.LastChild);

guck dir mal die Beschreibung von insertAfter an.

InsertAfter(newNode, refNode)

und refNode heisst soviel wie, füge es hinter refNode an.

Somit wäre dein Ziel objRoot.SelectSingleNode(strXmlQuery)

Geschrieben

Danke für deinen Tipp! Hab es gleich ausprobiert.

Ich hab gestern noch 4 Stunden daran rumgebastel und gegoogelt

aber es klappt immernoch nicht:(

Die Methode sieht nun wie folgt aus:


XmlDocument doc = new XmlDocument();

doc.Load(AktuellGeladeneDatei.Text);

XmlNode objRoot = doc.DocumentElement;

string strXmlQuery = markierterPfad.Text;

XmlNode objToBeCloned = objRoot.SelectSingleNode(strXmlQuery);

XmlNode objNewNode = objToBeCloned.CloneNode(true);

objRoot.InsertAfter(objNewNode, objRoot.SelectSingleNode(strXmlQuery));

doc.Save(AktuellGeladeneDatei.Text);

Sobald ich diese ausführe, bekomme ich folgende Fehlermeldung:
Der Verweisknoten ist diesem Knoten nicht untergeordnet.

Kann mir vll. noch jemand helfen - bin am Verzweifeln:confused:

Danke schon mal!

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...