DOMElement
在线手册:中文  英文

DOMElement::getAttribute

(PHP 5)

DOMElement::getAttributeReturns value of attribute

说明

public string DOMElement::getAttribute ( string $name )

Gets the value of the attribute with name name for the current node.

参数

name

The name of the attribute.

返回值

The value of the attribute, or an empty string if no attribute with the given name is found.

参见


DOMElement
在线手册:中文  英文

用户评论:

metron at underhive-planet dot com (2011-03-24 08:45:55)

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 (2009-07-17 22:25:18)

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."));
        }
    }
?>

mpalmer at cybersource dot com (2007-11-09 03:32:32)

- - - - - - - - - - - - - -

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

- - - - - - - - - - - - - -

易百教程