Zum Inhalt springen

TreeView kopieren


Hexe145

Empfohlene Beiträge

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!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...