Avatar billede fredeboss Nybegynder
23. januar 2006 - 14:16 Der er 1 kommentar

ændre tag name i domdocument

Jeg vil lige spørge eksperterne herinde om det kan lade sig gøre at ændre navnet på en node i et domdocument? Jeg har fundet ud af at functionerne set_name og set_namespace eksisterer men da der ikke findes en dyb beskrivelse af domdocumentet men kun en api ved jeg ikke hvordan de skal bruges?? Jeg får hele tiden af vide at den ikke kan finde funktionen i Domdocument->Element men hvad dælen er forskellen på domNode og domElement?? Her er lidt kode. Min clonede node skal helst have et andet navn af vigtige årsager som jeg ikke gider at beskrive her ...

$nodename = $_GET["extend"];
$clonednode = "";
$xml = new DomDocument;
$xml->load($_GET["document"]);
       
foreach ($xml->getElementsByTagname($nodename) as $name => $element) {
    $clonednode = $element->cloneNode(true);
    $element->parentNode->insertBefore($clonednode, $element);
    break;
}
       
echo $xml->saveXML();
Avatar billede olebole Juniormester
24. januar 2006 - 13:09 #1
<ole>

Du kan ikke ændre tag- eller nodeName på et XML-element. Det ville svare lidt til at ændre et img-element til et div-element i HTML ... og det kan man selvfølgelig ikke  :)

Sådan ville man gøre i en IE (så kan du selv nok 'oversætte'):


<script type="text/JavaScript">
function foo() {
    var newNode, txtNode, oldNode, sXml, xmlDoc;
    xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
    sXml = "<data><item id='enID'>En tekst</item></data>";
    xmlDoc.loadXML(sXml);
   
    // Find den ønskede node, der skal skiftes:
    oldNode = xmlDoc.documentElement.firstChild;
    // Opret ny node med det ønskede nodeName:
    newNode = xmlDoc.createElement("bla");
    // Klon og indsæt den gamle nodes tekstnode i den nye:
    newNode.appendChild( oldNode.firstChild.cloneNode(true) );
    // Sæt den gamle nodes attributter på den nye:
    for (var i=0; i<oldNode.attributes.length; i++) {
        newNode.setAttribute(oldNode.attributes[i].name, oldNode.attributes[i].value)
    }
    // Indsæt den nye node, før den gamle
    xmlDoc.documentElement.insertBefore(newNode, oldNode);
    // Fjern den gamle node
    xmlDoc.documentElement.removeChild(oldNode);
    alert(xmlDoc.xml)
}
</script>

<button onclick="foo()">TEST</button>

/mvh
</bole>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester