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

    (PHP 5, PHP 7)

    Create new attribute

    说明

    publicDOMDocument::createAttribute(string $name): DOMAttr

    This function creates a new instance of class DOMAttr.此节点出现在文档中,除非是用诸如DOMNode->appendChild()等函数来将其插入。

    参数

    $name

    The name of the attribute.

    返回值

    The new DOMAttr or FALSE if an error occurred.

    错误/异常

    DOM_INVALID_CHARACTER_ERR

    Raised if$namecontains an invalid character.

    参见

    • DOMNode::appendChild() Adds new child at the end of the children
    • DOMDocument::createAttributeNS() Create new attribute node with an associated namespace
    • DOMDocument::createCDATASection() Create new cdata node
    • DOMDocument::createComment() Create new comment node
    • DOMDocument::createDocumentFragment() Create new document fragment
    • DOMDocument::createElement() Create new element node
    • DOMDocument::createElementNS() Create new element node with an associated namespace
    • DOMDocument::createEntityReference() Create new entity reference node
    • DOMDocument::createProcessingInstruction() Creates new PI node
    • DOMDocument::createTextNode() Create new text node
    Just in case it isn't clear (like I had), an example:
    <?php
    $domDocument = new DOMDocument('1.0', "UTF-8");
    $domElement = $domDocument->createElement('field','some random data');
    $domAttribute = $domDocument->createAttribute('name');
    // Value for the created attribute
    $domAttribute->value = 'attributevalue';
    // Don't forget to append it to the element
    $domElement->appendChild($domAttribute);
    // Append it to the document itself
    $domDocument->appendChild($domElement);
    ?>
    Will output:
    <?xml version="1.0" encoding="UTF-8"?>
    <field name="attributevalue">some random data</field>
    This may be obvious to most people, but it gave me a few minutes of head-scratching before I figured it out, but ampersands need to be properly escaped as HTML entities.
    <?php
    $doc= new DOMDocument('1.0', "UTF-8");
    $invalid_elem = $doc->createElement('field', 'incorrect attribute');
    $invalid_attr = $doc->createAttribute('name');
    $invalid_attr->value = 'foo&bar';
    $invalid_elem->appendChild($invalid_attr);
    $doc->appendChild($invalid_elem);
    $valid_elem = $doc->createElement('field', 'correct attribute');
    $valid_attr = $doc->createAttribute('name');
    $valid_attr->value = 'foo&amp;bar';
    $valid_elem->appendChild($valid_attr);
    $doc->appendChild($valid_elem);
    ?>
    Will output:
    <?xml version="1.0" encoding="UTF-8"?>
    <field name="foo">incorrect attribute</field>
    <field name="foo&bar">correct attribute</field>
    As near as I can figure out, no exception is thrown for an invalid attribute. This will affect DOMDocuments created as HTML as well as XML.