Description of the current situation:
I have a folder full of pages [pages-folder], each page inside that folder has [among other things] a div with id="short-info"
.
I have a code that pulls all the
from that folder and displays the text inside it by using textContent
[which is for this purpose the same as nodeValue
]
The code that loads the divs:
Patterns of Enterprise Application Architecture
Design Patterns: Elements of Reusable Software Design
Clean Code
XML;$dom = new DOMDocument;
$dom->loadXML[$xml];
$books = $dom->getElementsByTagName['book'];
foreach [$books as $book] {
echo $book->nodeValue, PHP_EOL;
}
?>The above example will output:
Patterns of Enterprise Application Architecture Design Patterns: Elements of Reusable Software Design Clean CodeSee Also
- DOMDocument::getElementsByTagNameNS[] - Searches for all elements with given tag name in specified namespace
James L ¶
14 years ago
Return if there are no matches is an empty DOMNodeList. Check using length property, e.g.:
Philip N ¶
12 years ago
Note that when using getElementsByTagName that it is a dynamic list. Thus if you have code which adjusts the DOM structure it will change the results of the getElementsByTagName results list.
The following code iterates through a complete set of results and changes them all to a new tag:
Since the list is dynamically updating, $nodes->item[0] is the next "unchanged" tag.
gurmukh24 at gmail dot com ¶
13 years ago
Following Example is of multiple attributes and multiple child nodes. this is being used to make joomla plugin for bulk upload of articles. Gurmukh Singh Bhatti
any html code here
my name is so so
value2
value3
value4
Test value
value1
value2
value4
EOT;$dom = new DomDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML[$xml];
$params = $dom->getElementsByTagName['section']; // Find Sections
$k=0;
foreach [$params as $param] //go to each section 1 by 1
{
echo "Section Attribute :-> ".$params->item[$k]->getAttribute['name']."
"; //get section attribute
$params2 = $params->item[$k]->getElementsByTagName['category']; //digg categories with in Section
$i=0; // values is used to iterate categories
foreach [$params2 as $p] {
echo " - Category Attribute Name :-> ".$params2->item[$i]->getAttribute['name']."
"; //get Category attributes
$params3 = $params2->item[$i]->getElementsByTagName['arti']; //dig Arti into Categories
$j=0;//values used to interate Arti
foreach [$params3 as $p2]
{
echo " - Article Attribute Name : ".$params3->item[$j]->getAttribute['name'].""; //get arti atributes
echo " Value : ".$params3->item[$j]->nodeValue."
"; //get Node value ;
$j++;
}
$i++;
}
$k++;
}
?>
output :
Section Attribute :-> Section1
- Category Attribute Name :-> google
- Article Attribute Name : article1 Value : any html code heremy name is so so
- Article Attribute Name : article2 Value : value2
- Article Attribute Name : article3 Value : value3
- Article Attribute Name : article4 Value : value4
- Category Attribute Name :-> yahoo
- Article Attribute Name : articleSection2 Value : Test value
Section Attribute :-> Section2
- Category Attribute Name :-> msn
- Article Attribute Name : article2 Value : value1
- Article Attribute Name : article3 Value : value2
- Category Attribute Name :-> webcare
- Article Attribute Name : param3 Value : value4
calvin at g mail ¶
11 years ago
My first post!
And this is how I get elements by attribute and its value.
For an example, if I want to grab all DIV tags with class name 'className', then...
value1
value2
value3
EOT;$dom = new DomDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML[$xml];
$params = $dom->getElementsByTagName['param'];
foreach [
$params as $param] {
echo $param -> getAttribute['name'].'
';
}
?>
Expected result:
--------------
param1
param2
param3
yaakov dot moddel at gmail dot com ¶
10 years ago
This is a very simplistic way to traverse xml nodes and childnodes using the DOMDocument class
simon at onepointltd dot com ¶
9 years ago
Here is a function to convert the populated tables in and HTML document into an array.
Finding values of a node ¶
15 years ago
I don't know if this is that obvious but it was not for me, so in addition to gem at rellim dot com's posting:
adding
to the loop will output
value1
value2
value3
rsvvuuren at hotmail dot com ¶
8 years ago
I was in need of $dom->getElementsByTagName that would hist magic within a contextNode.
Why i needed getElementsByTagName instead of just simple using an xPath->query is because while looping through the returned nodelist, more nodes with the tagName i was looking for where created.
When using getElementsByTagName, the new nodes are "added" to the nodelist i already am looping through.
When using an xpath query, you wil only loop through the original nodelist, the newly created elements wil not appear in that nodelist.
I was already using an extended class on domDocument, so it was simple to create an kind of getElementsByTagName that would accept an contextNode.
....
So if you bored to search for solutions with DOM like I did, please ensure that your www environment has the correct libxml2 / PHP Version installed on your apache2 server.So the php code to climb along the elements is:
I realised, that there is a different when using different libxml2 versions on Apache2. This code will fail with libxml2 version 2.6.23 and PHP version 5.2.6
--
->It works fine with libxml2 version 2.6.32 and PHP version 5.2.6-3ubuntu4.6
->...and finally it also works with libxml2 2.7.7 and PHP >= 5.3
Mateusz K ¶
2 years ago
with the same nodes. Marco Maranao ¶ 12 years ago
if [
foreach[
if[
if[!empty[
echo
foreach[
james ¶ 12 years ago
If you want to move all nodes to another tag you can do it like that
Eg: replace function replaceDomElementTag[DOMDocument $dom, DOMElement $node, string $tagName]
{
$newElement = $dom->createElement[$tagName];
while [$node->childNodes->length]
$newElement->appendChild[$node->childNodes[0]]; $node->parentNode->replaceChild[$newElement, $node];
}$dom = new DOMDocument[];
replaceDomElementTag[$dom, $divElementToReplace, 'p'];
The following takes a list of news items from an XML file [or an RSS feed], assigning it to an array first for a name value pair and then generating an HTML list.
News 1
04/2/2010 08:00 EST
//news.example.com/news.pdf
News 2
04/25/2010 08:00 EST
//news.example.com/news.pdf
News 3
04/27/2010 08:00 EST
//news.example.com/news.pdf
EOT;
$doc = new DOMDocument[];
$items = $doc->getElementsByTagName['item'];
$headlines = array[];
$headline = array[];
foreach[$item->childNodes as $i] {
$headline[$i->nodeName] = $i->nodeValue;
}
}
$headlines[] = $headline;
}
$hc = 0;
'
;
if[++$hc
Problem:
You have an XML document that contains filename references to, say, images. Each filename reference is defined by filename.ext tag. You'd like to perform perform additional validation, say, after running the XML document through XSD validation. The additional validation can be any of your choice, in this example, it would be ideal to convert the PHP code to a function. The function would then determine if the images exist and return either an integer value or a boolean.
example.png
example2.png
The above image is an exampleSolution:
Chủ Đề