For clarification:
The assumingly 'discoverd' by previous posters and seemingly undocumented methods (.getElementsByTagName and .getAttribute) on this class (DOMNode) are in fact methods of the class DOMElement, which inherits from DOMNode.
See: http://www.php.net/manual/en/class.domelement.php
The DOMNode class
Class synopsis
Properties
- nodeName
-
Returns the most accurate name for the current node type
- nodeValue
-
The value of this node, depending on its type
- nodeType
-
Gets the type of the node. One of the predefined XML_xxx_NODE constants
- parentNode
-
The parent of this node
- childNodes
-
A DOMNodeList that contains all children of this node. If there are no children, this is an empty DOMNodeList.
- firstChild
-
The first child of this node. If there is no such node, this returns NULL.
- lastChild
-
The last child of this node. If there is no such node, this returns NULL.
- previousSibling
-
The node immediately preceding this node. If there is no such node, this returns NULL.
- nextSibling
-
The node immediately following this node. If there is no such node, this returns NULL.
- attributes
-
A DOMNamedNodeMap containing the attributes of this node (if it is a DOMElement) or NULL otherwise.
- ownerDocument
-
The DOMDocument object associated with this node.
- namespaceURI
-
The namespace URI of this node, or NULL if it is unspecified.
- prefix
-
The namespace prefix of this node, or NULL if it is unspecified.
- localName
-
Returns the local part of the qualified name of this node.
- baseURI
-
The absolute base URI of this node or NULL if the implementation wasn't able to obtain an absolute URI.
- textContent
-
This attribute returns the text content of this node and its descendants.
Table of Contents
- DOMNode::appendChild — Adds new child at the end of the children
- DOMNode::cloneNode — Clones a node
- DOMNode::getLineNo — Get line number for a node
- DOMNode::hasAttributes — Checks if node has attributes
- DOMNode::hasChildNodes — Checks if node has children
- DOMNode::insertBefore — Adds a new child before a reference node
- DOMNode::isDefaultNamespace — Checks if the specified namespaceURI is the default namespace or not
- DOMNode::isSameNode — Indicates if two nodes are the same node
- DOMNode::isSupported — Checks if feature is supported for specified version
- DOMNode::lookupNamespaceURI — Gets the namespace URI of the node based on the prefix
- DOMNode::lookupPrefix — Gets the namespace prefix of the node based on the namespace URI
- DOMNode::normalize — Normalizes the node
- DOMNode::removeChild — Removes child from list of children
- DOMNode::replaceChild — Replaces a child
DOMNode
13-Jan-2010 05:03
08-Jan-2010 09:54
You cannot simply overwrite $textContent, to replace the text content of a DOMNode, as the missing readonly flag suggests. Instead you have to do something like this:
<?php
$node->removeChild($node->firstChild);
$node->appendChild(new DOMText('new text content'));
?>
This example shows what happens:
<?php
$doc = DOMDocument::loadXML('<node>old content</node>');
$node = $doc->getElementsByTagName('node')->item(0);
echo "Content 1: ".$node->textContent."\n";
$node->textContent = 'new content';
echo "Content 2: ".$node->textContent."\n";
$newText = new DOMText('new content');
$node->appendChild($newText);
echo "Content 3: ".$node->textContent."\n";
$node->removeChild($node->firstChild);
$node->appendChild($newText);
echo "Content 4: ".$node->textContent."\n";
?>
The output is:
Content 1: old content // starting content
Content 2: old content // trying to replace overwriting $node->textContent
Content 3: old contentnew content // simply appending the new text node
Content 4: new content // removing firstchild before appending the new text node
If you want to have a CDATA section, use this:
<?php
$doc = DOMDocument::loadXML('<node>old content</node>');
$node = $doc->getElementsByTagName('node')->item(0);
$node->removeChild($node->firstChild);
$newText = $doc->createCDATASection('new cdata content');
$node->appendChild($newText);
echo "Content withCDATA: ".$doc->saveXML($node)."\n";
?>
03-Nov-2009 07:47
This class apparently also has a getElementsByTagName method.
I was able to confirm this by evaluating the output from DOMNodeList->item() against various tests with the is_a() function.
05-May-2009 03:36
It took me forever to find a mapping for the XML_*_NODE constants. So I thought, it'd be handy to paste it here:
1 XML_ELEMENT_NODE
2 XML_ATTRIBUTE_NODE
3 XML_TEXT_NODE
4 XML_CDATA_SECTION_NODE
5 XML_ENTITY_REFERENCE_NODE
6 XML_ENTITY_NODE
7 XML_PROCESSING_INSTRUCTION_NODE
8 XML_COMMENT_NODE
9 XML_DOCUMENT_NODE
10 XML_DOCUMENT_TYPE_NODE
11 XML_DOCUMENT_FRAGMENT_NODE
12 XML_NOTATION_NODE
06-Apr-2009 12:39
And apparently also a setAttribute method too:
$node->setAttribute( 'attrName' , 'value' );
24-Jan-2009 01:29
Try canonicalization:
<?php
$dom = new DOMDocument;
$dom->loadHTMLFile('http://www.example.com/');
echo $dom->documentElement->C14N();
?>
Or output it to a file, using C14NFile()
Undocumented stuff ;)
08-Dec-2008 07:27
This class has a getAttribute method.
Assume that a DOMNode object $ref contained an anchor taken out of a DOMNode List. Then
$url = $ref->getAttribute('href');
would isolate the url associated with the href part of the anchor.
