Question XML
- leymonie
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 14 ans 3 mois #10773
par leymonie
Bonjour !
J'essais depuis quelques temps de copier un nœud XML dans un autre mais sans succès.
Voici mon bout de code de test :
[code:1]
$xml = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<elements>
</elements>
</root>
'@
[xml]$dependanceConsolide = $xml
$xml2 = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<dependances>
<dependance desc=\"dependance du service WSUS envers le service sql\" Automated=\"true\" IDapplication=\"0\">
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"1\" />
</element>
</dependance>
<dependance id=\"1\" desc=\"dependance du service WSUS envers le service ISS\" Automated=\"true\" IDapplication=\"0\">
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"2\" />
</element>
</dependance>
<dependance id=\"2\" desc=\"dependance du service SLX envers le service SQL\" Automated=\"true\" IDapplication=\"1\">
<element type=\"service\" IDtype=\"4\">
<RequiereElement type=\"service\" IDtype=\"3\" />
</element>
</dependance>
</dependances>
</root>
'@
[xml]$dependancesXML = $xml2
Foreach ($dependance in $dependancesXML.root.dependances.dependance)
{
#$tmp=$dependance.CloneNode
$global:NewNodeelement = $dependanceConsolide.CreateElement(\"element\"«»)
$NewNodeelement.set_InnerXML(\"<toto>titi</toto>\"«»)
$dependanceConsolide.root.AppendChild($NewNodeelement)
}
$dependanceConsolide.get_OuterXml()
[/code:1]
Et j'obtiens ce résultat inattendu :
[code:1]
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<elements>
</elements>
<element>
<toto>titi</toto>
</element>
<element>
<toto>titi</toto>
</element>
<element>
<toto>titi</toto>
</element>
</root></root>
[/code:1]
Je m'attendais a voir mes nœuds <element> dans mon noeud <elementS> mais ce n'est pas le cas alors j'ai changé cette ligne :
[code:1]$dependanceConsolide.root.AppendChild($NewNodeelement)[/code:1]
Par cette ligne :
[code:1]$dependanceConsolide.root.elements.AppendChild($NewNodeelement)[/code:1]
Mais j'obtiens maintenant une erreur :
[code:1]
$error[0] | fl * -force
PSMessageDetails :
Exception : System.Management.Automation.RuntimeException: L'appel de la méthode a échoué parce que [System.Xml.XmlElement] ne contient pas de méthode nommée « elementsAppend
Child ».
à System.Management.Automation.ParserOps.CallMethod(Token token, Object target, String methodName, Object[] paramArray, Boolean callStatic, Object valueToSet)
à System.Management.Automation.MethodCallNode.InvokeMethod(Object target, Object[] arguments, Object value)
à System.Management.Automation.MethodCallNode.Execute(Array input, Pipe outputPipe, ExecutionContext context)
à System.Management.Automation.ParseTreeNode.Execute(Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)
à System.Management.Automation.StatementListNode.ExecuteStatement(ParseTreeNode statement, Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContex
t context)
TargetObject : elementsAppendChild
CategoryInfo : InvalidOperation: (elementsAppendChild:«»String) [], RuntimeException
FullyQualifiedErrorId : MethodNotFound
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
PipelineIterationInfo : {}
[/code:1]
Voilà ou j'en suis. J'ai bien essayé d'autres méthodes mais sans succès.
Quelqu'un aurait une piste ?
Merci de votre temps et de votre aide !
J'essais depuis quelques temps de copier un nœud XML dans un autre mais sans succès.
Voici mon bout de code de test :
[code:1]
$xml = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<elements>
</elements>
</root>
'@
[xml]$dependanceConsolide = $xml
$xml2 = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<dependances>
<dependance desc=\"dependance du service WSUS envers le service sql\" Automated=\"true\" IDapplication=\"0\">
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"1\" />
</element>
</dependance>
<dependance id=\"1\" desc=\"dependance du service WSUS envers le service ISS\" Automated=\"true\" IDapplication=\"0\">
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"2\" />
</element>
</dependance>
<dependance id=\"2\" desc=\"dependance du service SLX envers le service SQL\" Automated=\"true\" IDapplication=\"1\">
<element type=\"service\" IDtype=\"4\">
<RequiereElement type=\"service\" IDtype=\"3\" />
</element>
</dependance>
</dependances>
</root>
'@
[xml]$dependancesXML = $xml2
Foreach ($dependance in $dependancesXML.root.dependances.dependance)
{
#$tmp=$dependance.CloneNode
$global:NewNodeelement = $dependanceConsolide.CreateElement(\"element\"«»)
$NewNodeelement.set_InnerXML(\"<toto>titi</toto>\"«»)
$dependanceConsolide.root.AppendChild($NewNodeelement)
}
$dependanceConsolide.get_OuterXml()
[/code:1]
Et j'obtiens ce résultat inattendu :
[code:1]
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<elements>
</elements>
<element>
<toto>titi</toto>
</element>
<element>
<toto>titi</toto>
</element>
<element>
<toto>titi</toto>
</element>
</root></root>
[/code:1]
Je m'attendais a voir mes nœuds <element> dans mon noeud <elementS> mais ce n'est pas le cas alors j'ai changé cette ligne :
[code:1]$dependanceConsolide.root.AppendChild($NewNodeelement)[/code:1]
Par cette ligne :
[code:1]$dependanceConsolide.root.elements.AppendChild($NewNodeelement)[/code:1]
Mais j'obtiens maintenant une erreur :
[code:1]
$error[0] | fl * -force
PSMessageDetails :
Exception : System.Management.Automation.RuntimeException: L'appel de la méthode a échoué parce que [System.Xml.XmlElement] ne contient pas de méthode nommée « elementsAppend
Child ».
à System.Management.Automation.ParserOps.CallMethod(Token token, Object target, String methodName, Object[] paramArray, Boolean callStatic, Object valueToSet)
à System.Management.Automation.MethodCallNode.InvokeMethod(Object target, Object[] arguments, Object value)
à System.Management.Automation.MethodCallNode.Execute(Array input, Pipe outputPipe, ExecutionContext context)
à System.Management.Automation.ParseTreeNode.Execute(Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext context)
à System.Management.Automation.StatementListNode.ExecuteStatement(ParseTreeNode statement, Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContex
t context)
TargetObject : elementsAppendChild
CategoryInfo : InvalidOperation: (elementsAppendChild:«»String) [], RuntimeException
FullyQualifiedErrorId : MethodNotFound
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
PipelineIterationInfo : {}
[/code:1]
Voilà ou j'en suis. J'ai bien essayé d'autres méthodes mais sans succès.
Quelqu'un aurait une piste ?
Merci de votre temps et de votre aide !
Connexion ou Créer un compte pour participer à la conversation.
- leymonie
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
- leymonie
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 14 ans 3 mois #10775
par leymonie
Avec le bon code c'est mieux :
[code:1]
$xml = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<elements>
</elements>
</root>
'@
[xml]$dependanceConsolide = $xml
$xml2 = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<dependances>
<dependance desc=\"dependance du service WSUS envers le service sql\" Automated=\"true\" IDapplication=\"0\">
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"1\" />
</element>
</dependance>
<dependance id=\"1\" desc=\"dependance du service WSUS envers le service ISS\" Automated=\"true\" IDapplication=\"0\">
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"2\" />
</element>
</dependance>
<dependance id=\"2\" desc=\"dependance du service SLX envers le service SQL\" Automated=\"true\" IDapplication=\"1\">
<element type=\"service\" IDtype=\"4\">
<RequiereElement type=\"service\" IDtype=\"3\" />
</element>
</dependance>
</dependances>
</root>
'@
[xml]$dependancesXML = $xml2
Foreach ($dependance in $dependancesXML.root.dependances)
{
#$tmp=$dependance.CloneNode
$global:NewNodeelement = $dependanceConsolide.CreateElement(\"element\"«»)
$NewNodeelement.set_InnerXML($dependance.get_OuterXml())
$dependanceConsolide.root.elements.AppendChild($NewNodeelement)
}
$dependanceConsolide.get_OuterXml()
[/code:1]
Mais le problème reste le même ...
Merci !
[code:1]
$xml = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<elements>
</elements>
</root>
'@
[xml]$dependanceConsolide = $xml
$xml2 = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<dependances>
<dependance desc=\"dependance du service WSUS envers le service sql\" Automated=\"true\" IDapplication=\"0\">
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"1\" />
</element>
</dependance>
<dependance id=\"1\" desc=\"dependance du service WSUS envers le service ISS\" Automated=\"true\" IDapplication=\"0\">
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"2\" />
</element>
</dependance>
<dependance id=\"2\" desc=\"dependance du service SLX envers le service SQL\" Automated=\"true\" IDapplication=\"1\">
<element type=\"service\" IDtype=\"4\">
<RequiereElement type=\"service\" IDtype=\"3\" />
</element>
</dependance>
</dependances>
</root>
'@
[xml]$dependancesXML = $xml2
Foreach ($dependance in $dependancesXML.root.dependances)
{
#$tmp=$dependance.CloneNode
$global:NewNodeelement = $dependanceConsolide.CreateElement(\"element\"«»)
$NewNodeelement.set_InnerXML($dependance.get_OuterXml())
$dependanceConsolide.root.elements.AppendChild($NewNodeelement)
}
$dependanceConsolide.get_OuterXml()
[/code:1]
Mais le problème reste le même ...
Merci !
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 3 mois #10786
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:XML
Salut,
je ne compreds pas ce que tu veux faire. As-tu un exemple ou + de ton XML avant et après ( ici pas besoin de code PS) ?
je ne compreds pas ce que tu veux faire. As-tu un exemple ou + de ton XML avant et après ( ici pas besoin de code PS) ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- leymonie
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 14 ans 3 mois #10791
par leymonie
Bonjour Laurent,
a partir de ces deux fichiers XML :
[code:1]
$xml = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<elements>
</elements>
</root>
'@
[xml]$dependanceConsolide = $xml
$xml2 = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<dependances>
<dependance desc=\"dependance du service WSUS envers le service sql\" Automated=\"true\"
IDapplication=\"0\">
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"1\" />
</element>
</dependance>
<dependance id=\"1\" desc=\"dependance du service WSUS envers le service ISS\" Automated=\"true\"
IDapplication=\"0\">
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"2\" />
</element>
</dependance>
<dependance id=\"2\" desc=\"dependance du service SLX envers le service SQL\" Automated=\"true\"
IDapplication=\"1\">
<element type=\"service\" IDtype=\"4\">
<RequiereElement type=\"service\" IDtype=\"3\" />
</element>
</dependance>
</dependances>
</root>
'@
[/code:1]
j'aimerais en obtenir un troisième comme ceci :
[code:1]
$xml3 = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<elements>
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"1\" />
</element>
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"2\" />
</element>
<element type=\"service\" IDtype=\"4\">
<RequiereElement type=\"service\" IDtype=\"3\" />
</element>
</elements>
</root>
'@
[/code:1]
a partir de ces deux fichiers XML :
[code:1]
$xml = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<elements>
</elements>
</root>
'@
[xml]$dependanceConsolide = $xml
$xml2 = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<dependances>
<dependance desc=\"dependance du service WSUS envers le service sql\" Automated=\"true\"
IDapplication=\"0\">
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"1\" />
</element>
</dependance>
<dependance id=\"1\" desc=\"dependance du service WSUS envers le service ISS\" Automated=\"true\"
IDapplication=\"0\">
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"2\" />
</element>
</dependance>
<dependance id=\"2\" desc=\"dependance du service SLX envers le service SQL\" Automated=\"true\"
IDapplication=\"1\">
<element type=\"service\" IDtype=\"4\">
<RequiereElement type=\"service\" IDtype=\"3\" />
</element>
</dependance>
</dependances>
</root>
'@
[/code:1]
j'aimerais en obtenir un troisième comme ceci :
[code:1]
$xml3 = @'
<?xml version=\"1.0\" standalone=\"yes\"?>
<root>
<elements>
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"1\" />
</element>
<element type=\"service\" IDtype=\"0\">
<RequiereElement type=\"service\" IDtype=\"2\" />
</element>
<element type=\"service\" IDtype=\"4\">
<RequiereElement type=\"service\" IDtype=\"3\" />
</element>
</elements>
</root>
'@
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 14 ans 3 mois #10797
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:XML
Une solution, en picorant à droite à gauche :
[code:1]
$Cible = New-Object -TypeName xml
$Node = $Cible.CreateXmlDeclaration('1.0', 'utf-8', $null)
[void]$Cible.AppendChild($Node);
$Root = $Cible.CreateElement(\"Root\")
[void]$Cible.AppendChild($Root)
$Elements = $Cible.CreateElement(\"Elements\")
Select-Xml -content $xml2 -XPath \"//dependance\"|
Foreach {
$Elements.InnerXml+=$_.Node.InnerXml
}
[void]$Root.AppendChild($Elements)
$Cible.Save([Console]::Out)
$Cible.Save(\"C:\temp\Test.XML\")
type \"C:\temp\Test.XML\"
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 20/12/11 21:04
[code:1]
$Cible = New-Object -TypeName xml
$Node = $Cible.CreateXmlDeclaration('1.0', 'utf-8', $null)
[void]$Cible.AppendChild($Node);
$Root = $Cible.CreateElement(\"Root\")
[void]$Cible.AppendChild($Root)
$Elements = $Cible.CreateElement(\"Elements\")
Select-Xml -content $xml2 -XPath \"//dependance\"|
Foreach {
$Elements.InnerXml+=$_.Node.InnerXml
}
[void]$Root.AppendChild($Elements)
$Cible.Save([Console]::Out)
$Cible.Save(\"C:\temp\Test.XML\")
type \"C:\temp\Test.XML\"
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 20/12/11 21:04
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.114 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- XML