M
MrWeedster
Gast
Hallo.
Nach stundenlangem suchen und rumprobieren komm ich auf keinen gruenen Zweig.
Ich moechte folgende XML einlesen und verarbeiten:
Der Code sieht so aus:
Die write-host Ausgabe bringt aber nix.
Wie muss ich richtig auf die Elemente zugreifen das ich sie verarbeiten kann?
Ich will alle replication_dirs in der Schleife durchgehen und verarbeiten.
Wenn ich das ganze in der Shell direkt durchspiele, kann ich mir mit
$topic_node.replication_dir
den Inhalt der replication_dirs anschauen:
Aber warum funktioniert das nicht in dem foreach oben? Wo ist mein Denkfehler?
Ich wuerde erwarten das ich mit foreach ($replica_dir in $topic_node.replication_dir)
alle Elemente der replication_dirs erhalte. Sprich: dir_1, dir_2
Ich hab da alles moegliche schon hingeschrieben (also bei ... in $topic_node.replication.dir, z.B. .name und .Elements und was weiss ich, aber iwie haut nix hin)
WTF is wrong with me?
Um meinem gleich darauf folgenden Problem zuvorzukommen, gleich hier noch die
anschliessende Frage: exception_dirs sind ja untergeordnete, geschachtelte
Elemente. Wie kann ich die anschliessend alle durchgehen?
(Vermutlich beantwortet sich die Frage mit der Antwort auf die erste)
Ich bin sicher das es eine simple Loesung ist :>
K, der Kacknoob hats doch noch selbst hingekriegt:
Fehler war in dem Foreach:
Statt:
Und schon kriegt man die Elemente.
(Warum man nur erst immer Topics erstellen muss um kurz danach selbst auf die Loesung zu kommen ^^)
o_O
Jo, trotz langem Probieren komm ich jetzt doch nicht mehr weiter:
Ich moechte jetzt eine Ebene tiefer gehen und die exception_dirs auslesen und jedes durchgehen.
Wie greif ich auf die zu?
Ich wuerde jetzt in der foreach als naechstes den Knoten aendern:
So rein logisch waere das doch der Weg, oder?
Natuerlich funktioniert das nicht:
Bla, wtf? Oben gings doch genauso.
Wie muss ich auf die exception_dirs zugreifen?
Nach stundenlangem suchen und rumprobieren komm ich auf keinen gruenen Zweig.
Ich moechte folgende XML einlesen und verarbeiten:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Location name ="Buxthehude">
<TOPIC>
<from>one_server</from>
<to>another_server</to>
<replication_dir name="dir1">
<exception_dir>dir1\exc_dir1</exception_dir>
<exception_dir>dir1\exc_dir2</exception_dir>
</replication_dir>
<replication_dir name="dir2">
<exception_dir>dir2\exc_dir3</exception_dir>
<exception_dir>dir2\exc_dir4</exception_dir>
<exception_dir>dir2\exc_dir5</exception_dir>
<exception_dir>dir2\exc_dir6</exception_dir>
<exception_dir>dir2\exc_dir7</exception_dir>
</replication_dir>
</TOPIC>
</Location>
</Root>
Der Code sieht so aus:
Code:
[xml] $doc = [xml](Get-Content -Path $xmlfile)
$topic_node = $doc.SelectSingleNode("/Root/Location[@name='Buxthehude']/TOPIC")
$source_server = $topic_node.from
$target_server = $topic_node.to
foreach ($replica_dir in $topic_node.replication_dir) {
write-host "would replicate $replica_dir"
}
Die write-host Ausgabe bringt aber nix.
Wie muss ich richtig auf die Elemente zugreifen das ich sie verarbeiten kann?
Ich will alle replication_dirs in der Schleife durchgehen und verarbeiten.
Wenn ich das ganze in der Shell direkt durchspiele, kann ich mir mit
$topic_node.replication_dir
den Inhalt der replication_dirs anschauen:
Code:
PS D:\work\scripts> $topic_node.replication_dir
name exception_dir
---- -------------
dir_1 {dir_1\exc_dir1, dir_1\exc_dir2}
dir_2 {dir_2\exc_dir3, dir_2\exc_dir4}
Aber warum funktioniert das nicht in dem foreach oben? Wo ist mein Denkfehler?
Ich wuerde erwarten das ich mit foreach ($replica_dir in $topic_node.replication_dir)
alle Elemente der replication_dirs erhalte. Sprich: dir_1, dir_2
Ich hab da alles moegliche schon hingeschrieben (also bei ... in $topic_node.replication.dir, z.B. .name und .Elements und was weiss ich, aber iwie haut nix hin)
WTF is wrong with me?
Um meinem gleich darauf folgenden Problem zuvorzukommen, gleich hier noch die
anschliessende Frage: exception_dirs sind ja untergeordnete, geschachtelte
Elemente. Wie kann ich die anschliessend alle durchgehen?
(Vermutlich beantwortet sich die Frage mit der Antwort auf die erste)
Ich bin sicher das es eine simple Loesung ist :>
Ergänzung ()
K, der Kacknoob hats doch noch selbst hingekriegt:
Fehler war in dem Foreach:
Statt:
Code:
foreach ($replication_dir in $topic_node.replication_dir) {
Code:
foreach ($replication_dir in $topic_node.replication_dir | %{$_.name}) {
Und schon kriegt man die Elemente.
(Warum man nur erst immer Topics erstellen muss um kurz danach selbst auf die Loesung zu kommen ^^)
o_O
Ergänzung ()
Jo, trotz langem Probieren komm ich jetzt doch nicht mehr weiter:
Ich moechte jetzt eine Ebene tiefer gehen und die exception_dirs auslesen und jedes durchgehen.
Wie greif ich auf die zu?
Ich wuerde jetzt in der foreach als naechstes den Knoten aendern:
Code:
[xml] $doc = [xml](Get-Content -Path $xmlfile)
$topic_node = $doc.SelectSingleNode("/Root/Location[@name='Buxthehude']/TOPIC")
$source_server = $topic_node.from
$target_server = $topic_node.to
foreach ($replica_dir in $topic_node.replication_dir) {
write-host "would replicate $replica_dir"
$exception_node = $topic_node.replication_dir[@name='$replica_dir']
Pseudo-Code:
foreach ($exception_dir in $exception_node) {
function aufrufen
}
}
So rein logisch waere das doch der Weg, oder?
Natuerlich funktioniert das nicht:
Code:
Der Splat-Operator "@" kann nicht zum Verweisen auf Variablen in einem Ausdruck verwendet werden. "@name" kann nur als
Argument für einen Befehl verwendet werden. Verwenden Sie "$name" zum Verweisen auf Variablen in einem Ausdruck.
Bla, wtf? Oben gings doch genauso.
Wie muss ich auf die exception_dirs zugreifen?
Zuletzt bearbeitet von einem Moderator: