- - - - - - - - - - - - - -
XML Data:
<data>
<Report ID="1">
<Date>REVIEW</Date>
<AuthorID>1</AuthorID>
</Report>
<Report ID="2">
<Date>REVIEW</Date>
<AuthorID>2</AuthorID>
</Report>
</data>
- - - - - - - - - - - - - -
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load( 'data.xml' );
$searchNode = $xmlDoc->getElementsByTagName( "Report" );
foreach( $searchNode as $searchNode )
{
$valueID = $searchNode->getAttribute('ID');
$xmlDate = $searchNode->getElementsByTagName( "Date" );
$valueDate = $xmlDate->item(0)->nodeValue;
$xmlAuthorID = $searchNode->getElementsByTagName( "AuthorID" );
$valueAuthorID = $xmlAuthorID->item(0)->nodeValue;
echo "$valueID - $valueDate - $valueAuthorID\n";
}
?>
- - - - - - - - - - - - - -
Output:
1 - REVIEW - 1
2 - REVIEW - 2
- - - - - - - - - - - - - -
DOMElement::getAttribute
(PHP 5)
DOMElement::getAttribute — Returns value of attribute
Beschreibung
string DOMElement::getAttribute
( string
$name
)
Gets the value of the attribute with name name
for the current node.
Parameter-Liste
-
name -
The name of the attribute.
Rückgabewerte
The value of the attribute, or an empty string if no attribute with the
given name is found.
Siehe auch
- DOMElement::hasAttribute() - Checks to see if attribute exists
- DOMElement::setAttribute() - Adds new attribute
- DOMElement::removeAttribute() - Removes attribute
mpalmer at cybersource dot com ¶
5 years ago
metron at underhive-planet dot com ¶
2 years ago
You can also use DOMXPath objects to interleave foreach() in this way is slightly shorter. If you need a special element or attribute value. The variable $xquery needs xpath expression. This example filters all group elements as described in xpath query ($xquery), then it filters again the results by last if condition and stores all attribute names in an object variable of type array ($this->menu).
Benefit: Using class array variable $menu in other class methods. Whenever you need those fields.
XML:
<xml>
<category menu="products">
<groups>
<group menu="vegetables">...</group>
</groups>
</category>
</xml>
<?php
public class example {
public $menu;
function _construct(){}
public function getGroupValueByCategory($xpath_object,$category) {
$xquery = '//category[normalize-space(@menu)="'.$category.'"]/groups/group';
if($elements = $xpobject->evaluate($xquery)){
$this->menu = array();
}
foreach ($elements as $element) {
if($element->hasAttributes()){
$attributes = $element->attributes;
if(!is_null($attributes)){
foreach ($attributes as $index=>$attr){
if($attr->name == 'menu'){
$this->menu[] = $attr->value;
}
}
}
}
}
}
}
?>
I used this to implement simple menu structure.
info at kevinfilteau dot com ¶
3 years ago
I want to retrieve value of name in my current language, or the default, or anything set if none of the above are true.
There is a sample XML file:
<product>
<name lang="en">Candy</name>
<name lang="fr">Bonbon</name>
<name>Bonbon (no lang)</name>
</product>
There is my function, hope this can help. And if anybody want's to improve it, your welcom. The input elements are DOMNodeList returned from a previous DomXPath Query.
<?php
private function getValueByLang($elements) {
$a = array();
if (!is_null($elements)) {
foreach ($elements as $element) {
if( !is_null($element->attributes)) {
$is_lang = false;
foreach ($element->attributes as $attrName => $attrNode) {
if( 'lang' == $attrName ) {
$a[$attrNode->value] = $element->nodeValue;
$is_lang = true;
}
}
if( !$is_lang ) {
$a[] = $element->nodeValue;
}
}
}
// Returns current language if set.
if( array_key_exists($this->lang, $a)) {
$result = $a[$this->lang];
// Returns default language if set.
} elseif( array_key_exists($this->default_lang, $a)) {
$result = $a[$this->default_lang];
// Returns first result with no language attribute.
} elseif( isset($a[0])) {
$result = $a[0];
// Return anything set.
} elseif( $result = reset($a) ) {
// Return nothing, Doh!
} else {
$result = false;
}
return($result);
} else {
throw new Exception(printf("No elements defined."));
}
}
?>
