2010-11-05 39 views
0

J'ai un fichier xmlComment puis-je modifier un fichier XML à l'aide DOMDocument et XQuery

<events date="06-11-2010"> 
    <event id="8"> 
     <title>Proin porttitor sollicitudin augue</title> 
     <description><![CDATA[Lorem nunc.]]></description> 
    </event> 
    </events> 
    <events date="16-11-2010"> 
    <event id="4"> 
     <title>uis aliquam dapibus</title> 
     <description><![CDATA[consequat vel, pulvinar.</createCDATASection></description> 
    </event> 
    <event id="1"><title>You can use HTML and CSS</title> 
    <description><![CDATA[Lorem ipsum dolor sit amet]]></description></event></events> 

Comment puis-je modifier le fichier xml par rapport à id utilisant DOMDocument et XQuery pour préserver CDATA Merci à l'avance

texte du lien

+0

Que voulez-vous faire? S'il vous plaît ajouter un peu plus de détails à votre question. – salathe

+0

Je veux éditer le titre ou la description.Description est avec 'CDATA' avec une valeur donnée de' event id' – Warrior

Répondre

2

Tout d'abord, votre document a une syntaxe XML non valide (la balise </createCDATASection>). TPTA:

<events date="06-11-2010"> 
    <event id="8"> 
    <title>Proin porttitor sollicitudin augue</title> 
    <description><![CDATA[Lorem nunc.]]></description> 
    </event> 
</events> 
<events date="16-11-2010"> 
    <event id="4"> 
    <title>uis aliquam dapibus</title> 
    <description><![CDATA[consequat vel, pulvinar.]]></description> 
    </event> 
    <event id="1"> 
    <title>You can use HTML and CSS</title> 
    <description><![CDATA[Lorem ipsum dolor sit amet]]></description> 
</event> 
</events> 

Maintenant, voici une solution pour modifier le titre/description de votre événement:

$dom = new DOMDocument; 
$dom->loadXML(file_get_contents('doc.xml')); 

$xpath = new DOMXPath($dom); 
$nodes = $xpath->query('//event[@id="4"]/title | //event[@id="4"]/description'); 

// title 
$node = $nodes->item(0); 
$node->nodeValue = 'hello world'; 

// description 
$node = $nodes->item(1); 
$cdata = $node->firstChild; 
$cdata->replaceData(0, strlen($cdata->data), 'hello world description'); 

print $dom->saveXML();