Frage zu Namespaces XML und SelectSingleNode
Hallo
Ich habe mittlerweile folgendes Script
$oldfile = "C:\Users\H50BYSA\Downloads\file\file_xml_verify.xml"
$newfile = "C:\Users\H50BYSA\Downloads\file\file_verify1.xml"
$xml = [XML](Get-Content -Path $oldfile)
$newchild = $xml.CreateElement("tag3")
$newChild.InnerText = $xml.gruppe1.untergruppe1.tag2
$node = $xml.SelectSingleNode('/gruppe1/untergruppe1/tag2')
$node.ParentNode.InsertAfter($newChild,$node)
$xml
Leider klappt bei mir genau dieser Teil nicht
$node = $xml.SelectSingleNode('/gruppe1/untergruppe1/tag2')
denn auf
$node.ParentNode.InsertAfter($newChild,$node)
bekomme ich
You cannot call a method on a null-valued expression.
Zum Hinweis mein XML sieht wie folgt aus stark schematisiert
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="sheet-verify.xslt"?><nsp1:gruppe1 version="2.0" xsi:schemaLocation="pfad auf xsd" xmlns:nsp2 pfad auf die Namespaces ....
<nsp2:untergruppe1><nsp3:tag1>111111</nsp3:tag1><nsp3:tag2>22222</nsp3:tag2><nsp3:tag4>22222</nsp3:tag4></nsp2:untergruppe1>
<nsp2:untergruppe1><nsp4:tag1/> ............</nsp2:untergruppe1>
</nsp1:gruppe1>
also meine Tags haben im XML alle einen Namespace
hat jemand eine Idee warum der Xpath nicht klappt
haeb es auch versucht mit nur '/' oder '/gruppe1' aber immer bekomme ich den Null Value
Danke für die Hilfe
Ich habe mittlerweile folgendes Script
$oldfile = "C:\Users\H50BYSA\Downloads\file\file_xml_verify.xml"
$newfile = "C:\Users\H50BYSA\Downloads\file\file_verify1.xml"
$xml = [XML](Get-Content -Path $oldfile)
$newchild = $xml.CreateElement("tag3")
$newChild.InnerText = $xml.gruppe1.untergruppe1.tag2
$node = $xml.SelectSingleNode('/gruppe1/untergruppe1/tag2')
$node.ParentNode.InsertAfter($newChild,$node)
$xml
Leider klappt bei mir genau dieser Teil nicht
$node = $xml.SelectSingleNode('/gruppe1/untergruppe1/tag2')
denn auf
$node.ParentNode.InsertAfter($newChild,$node)
bekomme ich
You cannot call a method on a null-valued expression.
Zum Hinweis mein XML sieht wie folgt aus stark schematisiert
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="sheet-verify.xslt"?><nsp1:gruppe1 version="2.0" xsi:schemaLocation="pfad auf xsd" xmlns:nsp2 pfad auf die Namespaces ....
<nsp2:untergruppe1><nsp3:tag1>111111</nsp3:tag1><nsp3:tag2>22222</nsp3:tag2><nsp3:tag4>22222</nsp3:tag4></nsp2:untergruppe1>
<nsp2:untergruppe1><nsp4:tag1/> ............</nsp2:untergruppe1>
</nsp1:gruppe1>
also meine Tags haben im XML alle einen Namespace
hat jemand eine Idee warum der Xpath nicht klappt
haeb es auch versucht mit nur '/' oder '/gruppe1' aber immer bekomme ich den Null Value
Danke für die Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 547258
Url: https://administrator.de/contentid/547258
Ausgedruckt am: 24.11.2024 um 18:11 Uhr
6 Kommentare
Neuester Kommentar
Musst du mit einem Namespace-Manager arbeiten und im XPath die Selektoren anpassen und den Namespacemanager der Abfrage als Parameter übergeben, das neue Element muss natürlich auch mit dem entsprechenden Namespace erstellt werden ...
p.s. Wieso extra ein neuer Thread dafür??? Du hättest einfach im Thread von gestern die ergänzende Frage dazu stellen können, aber du hast ja noch nicht mal freundliche Rückmeldung gegeben ! Hier sitzen immerhin noch Leute und keine Roboter die sich deiner Frage annehmen! DANKE.
# Beispiel XML Object erzeugen
$xml = [xml]@"
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="sheet-verify.xslt"?>
<nsp1:gruppe1 version="2.0" xmlns:nsp1="http://nsp1.com" xmlns:nsp2="http://nsp2.com" xmlns:nsp3="http://nsp3.com">
<nsp2:untergruppe1>
<nsp3:tag1>111111</nsp3:tag1>
<nsp3:tag2>22222</nsp3:tag2>
<nsp3:tag4>22222</nsp3:tag4>
</nsp2:untergruppe1>
</nsp1:gruppe1>
"@
# Namespace-Manager und Namespaces hinzufügen
[System.Xml.XmlNamespaceManager]$ns = new-Object System.Xml.XmlNamespaceManager $xml.NameTable
$ns.AddNamespace("nsp1","http://nsp1.com")
$ns.AddNamespace("nsp2","http://nsp2.com")
$ns.AddNamespace("nsp3","http://nsp3.com")
# erstelle Element mit Inhalt
$newchild = $xml.CreateElement("nsp3:tag3","http://nsp3.com")
$newChild.InnerText = "WertDEF"
# Wähle den Referenzknoten mit XPath aus
$node = $xml.SelectSingleNode('/nsp1:gruppe1/nsp2:untergruppe1/nsp3:tag2',$ns)
# füge den neuen Knoten nach dem Referenzknoten ein
$node.ParentNode.InsertAfter($newChild,$node) | out-null
# Gib nur zur Anschauung den XML Code aus
$xml.OuterXml
p.s. Wieso extra ein neuer Thread dafür??? Du hättest einfach im Thread von gestern die ergänzende Frage dazu stellen können, aber du hast ja noch nicht mal freundliche Rückmeldung gegeben ! Hier sitzen immerhin noch Leute und keine Roboter die sich deiner Frage annehmen! DANKE.