• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • SimpleXMLElement::addAttribute()

    (PHP 5 >= 5.1.3, PHP 7)

    Adds an attribute to the SimpleXML element

    说明

    publicSimpleXMLElement::addAttribute(string $name[,string $value[,string $namespace]]): void

    Adds an attribute to the SimpleXML element.

    参数

    $name

    The name of the attribute to add.

    $value

    The value of the attribute.

    $namespace

    If specified, the namespace to which the attribute belongs.

    返回值

    没有返回值。

    范例

    Note:

    Listed examples may includeexample.php, which refers to the XML string found in the first example of the basic usage guide.

    Example #1 Add attributes and children to a SimpleXML element

    <?php
    include 'example.php';
     
    $sxe = new SimpleXMLElement($xmlstr);
    $sxe->addAttribute('type', 'documentary');
    $movie = $sxe->addChild('movie');
    $movie->addChild('title', 'PHP2: More Parser Stories');
    $movie->addChild('plot', 'This is all about the people who make it work.');
    $characters = $movie->addChild('characters');
    $character  = $characters->addChild('character');
    $character->addChild('name', 'Mr. Parser');
    $character->addChild('actor', 'John Doe');
    $rating = $movie->addChild('rating', '5');
    $rating->addAttribute('type', 'stars');
     
    echo $sxe->asXML();
    ?>
    

    以上例程的输出类似于:

    <?xml version="1.0" standalone="yes"?>
    <movies type="documentary">
     <movie>
      <title>PHP: Behind the Parser</title>
      <characters>
       <character>
        <name>Ms. Coder</name>
        <actor>Onlivia Actora</actor>
       </character>
       <character>
        <name>Mr. Coder</name>
        <actor>El Act&#xD3;r</actor>
       </character>
      </characters>
      <plot>
       So, this language. It's like, a programming language. Or is it a
       scripting language? All is revealed in this thrilling horror spoof
       of a documentary.
      </plot>
      <great-lines>
       <line>PHP solves all my web problems</line>
      </great-lines>
      <rating type="thumbs">7</rating>
      <rating type="stars">5</rating>
     </movie>
     <movie>
      <title>PHP2: More Parser Stories</title>
      <plot>This is all about the people who make it work.</plot>
      <characters>
       <character>
        <name>Mr. Parser</name>
        <actor>John Doe</actor>
       </character>
      </characters>
      <rating type="stars">5</rating>
     </movie>
    </movies>
    

    参见

    • SimpleXMLElement::addChild() Adds a child element to the XML node
    • Basic SimpleXML usage
    You cannot use this to update an existing attribute's value.
    Instead, get a DOM version of the SimpleXMLElement and use setAttribute, as per:
    $XML = '<element a="aa">Text</element>';
    $snode = new simple_xml_element($XML);
    $dnode = dom_import_simplexml($snode);
    $dnode->setAttribute('a', 'bb');
    Resulting XML for the node is:
    <element a="bb">Text</element>
    If the attribute already exists, addAttribute does nothing.
    example:
    <?php
    $xml_string = <<<XML
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
      <item id="foo">
    <root>
    XML;
    $xml = simplexml_load_string($xml_string);
    $xml->item->addAttribute('id', 'bar');
    echo $xml->asXML();
    ?>
    The above examples will output:
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
      <item id="foo">
    <root>
    If you need an Namespace, you must write a Prefix of the Namespace + the Name of the Attribute ("prefix:name") as the first parameter AND the uri as the third one. (I don't know why?!)
    Example code:
    <?php
    $xml = new SimpleXMLElement("<packagedElement></packagedElement>");
    $xml->addAttribute("xmi:type", "uml:Class", "http://schema.omg.org/spec/XMI/2.1"); 
    echo $xml->asXml();
    ?>
    Output:
    <packagedElement xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmi:type="uml:Class"></packagedElement>
    You can access a node child with his name this way :
    <?php
    $root = new SimpleXMLElement($filePath);
    echo $root->nodeName->attributes;
    // It works recursivly so this will work too
    echo $root->nodeName->subNodeName->attributes();
    ?>
    But if you want to ADD an attribute to a children you MUST use the children() method to access and modfiy it or it will modify the parent's attributes.
    <?php
    // Add a subnode
    $element->nodeName->addChild('subNodeName', "whatever you want");
            
    // Get the pos in the childrens of the parent node
    $lastNodePos = $element->nodeName->count() 1;
    // Get the parents node childrens
    $nodeChildrens = $element->nodeName->children();
    // Add an attribute to the last created
    $nodeChildrens[$lastNodePos]->addAttribute('attributeName', "The attribute value);
    ?>