Je n'arrive pas à modifier un fichier XML. J'essaie actuellement d'utiliser Nokogiri, mais je suis ouvert à toute autre bibliothèque Ruby pour résoudre ce problème. J'essaie d'ajouter un ensemble de nœuds à l'intérieur d'un autre ensemble de nœuds. Les deux ont des espaces de noms intéressants. Voici le code. Je suis en train d'ajouter le new_node au parent juste après la première <p:sp>
Ajout de noeuds avec des espaces de noms dans un fichier XML avec Nokogiri
require 'rubygems'
require 'nokogiri'
parent = <<EOF
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" mc:Ignorable="mv" mc:PreserveAttributes="mv:*">
<p:spTree>
<p:sp>
<p:nvSpPr>
<p:cNvPr id="1" name="Title 1"/>
</p:nvSpPr>
</p:sp>
</p:spTree>
</p:sld>
EOF
new_node = <<EOF
<p:sp>
<p:cNvPr id="2" name="Title 2"/>
<a:off x="1524000" y="4572000"/>
</p:sp>
EOF
@doc = Nokogiri::XML(parent)
@doc.xpath('.//p:sp').after(new_node)
@DOC ressemble à quelque chose comme le XML ci-dessous après le code ci-dessus fonctionne:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" mc:Ignorable="mv" mc:PreserveAttributes="mv:*">
<p:spTree>
<p:sp>
<p:nvSpPr>
<p:cNvPr id="1" name="Title 1"/>
</p:nvSpPr>
</p:sp>
<p:p:sp>
<p:p:cNvPr name="Title 2" id="2"/>
<p:a:off x="1524000" y="4572000"/>
</p:p:sp>
</p:spTree>
</p:sld>
avis il tout sous p un espace de noms : encore. Les deux noeuds devraient être <p:sp>
et <a:off>
pas <p:p:sp>
et <p:a:off>
Je pourrais juste enlever le p: du nouveau_node mais le a: off serait toujours namespaced sous p: ce qu'il ne peut pas être. Je sais que je dois me tromper. Le résultat final que je cherche est:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" mc:Ignorable="mv" mc:PreserveAttributes="mv:*">
<p:spTree>
<p:sp>
<p:nvSpPr>
<p:cNvPr id="1" name="Title 1"/>
</p:nvSpPr>
</p:sp>
<p:sp>
<p:cNvPr name="Title 2" id="2"/>
<a:off x="1524000" y="4572000"/>
</p:sp>
</p:spTree>
</p:sld>
la page d'accueil Nokogiri: « XML est comme la violence - si elle ne résout pas vos problèmes, vous n'utilisez pas assez. " –