2010-05-18 4 views
5

In samplexml.svg c'è un nodoCome cambiare il valore di attributo di file in formato SVG

<image width="744" height="1052" xlink:href="image1.png"/> 

ho bisogno di sostituire "image1.png" con un altro valore come "image2.png". Per favore guidami con codice di esempio su come farlo.

Potrei ottenere il valore dell'attributo "image1.png". Ecco il codice:

$xdoc = new DomDocument; 
$xdoc->Load('samplexml.svg'); 
$tagName = $xdoc->getElementsByTagName('image')->item(0); 
$attribNode = $tagName->getAttributeNode('xlink:href'); 

echo "Attribute Name : " . $attribNode->name . "<br/>"; 
echo "Attribute Value : " . $attribNode->value; 

Qui è samplexml.svg:

<svg> 
    <g> 
     <title>Test title</title> 
     <image x="0" y="0" width="744" height="1052" xlink:href="image1.png"/> 
    </g> 
</svg> 

Come faccio a livello di codice modificare il xlink: href valore di?

risposta

-2

Un modo potrebbe essere quello di caricare il file come una stringa e quindi effettuare la ricerca e la sostituzione su di esso. È quindi possibile utilizzare loadXML http://www.php.net/manual/en/domdocument.loadxml.php e fornire la stringa modificata come parametro.

+3

-1 per il suggerimento di ricerca/sostituire quando sta già utilizzando il DOM. –

+0

Vacca sacra, quindi non puoi suggerire alternative migliori? Allentare il ragazzo. – zaf

+0

Ho già lasciato [la mia risposta] (http://stackoverflow.com/questions/2857113/how-to-change-the-attribute-value-of-svg-file/2857206#2857206). Ti sto solo dando un feedback sul downvote. Ogni volta che qualcuno suggerisce di cercare/sostituire dati XML/HTML, Dio uccide un gattino. –

13

Uso DOMElement::setAttributeNS():

$xdoc = new DomDocument; 
$xdoc->Load('svg.xml'); 
$tagName = $xdoc->getElementsByTagName('image')->item(0); 
$attribNode = $tagName->getAttributeNode('xlink:href'); 

echo "Attribute Name : " . $attribNode->name . "<br/>"; 
echo "Attribute Value : " . $attribNode->value; 

$tagName->setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', 'image2.png'); 

echo $xdoc->saveXML(); 
+0

+1 Per me, sto imparando qualcosa di nuovo oggi. – zaf