Question XML

Plus d'informations
il y a 14 ans 3 mois #10773 par leymonie
XML a été créé 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 !

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 3 mois #10774 par leymonie
Réponse de leymonie sur le sujet Re:XML
oups, c'était pas le bon code ...
perdez pas votre temps a le lire, je vais refaire un nouveau poste ...



Désolé

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 3 mois #10775 par leymonie
Réponse de leymonie sur le sujet Re:XML
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 !

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 3 mois #10786 par Laurent Dardenne
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) ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 3 mois #10791 par leymonie
Réponse de leymonie sur le sujet Re:XML
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]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 14 ans 3 mois #10797 par Laurent Dardenne
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

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.057 secondes
Propulsé par Kunena