Php domdocument lấy các phần tử con

As of PHP 5.1.6 with libxml 2.6.26 and DOM/XML API version 20031129, importNode[] does nothing if attempting to import from the same document.  Meaning, if you do an $ret = importNode and then appendChild[$ret] or insertBefore[$ret, ...] then you will end up *moving* the node instead of ending up with a copy.

If you expect importNode to give you a copy of the source [in this case, a deep copy] then you must account for them being from the same document.  This function addresses this:

// Import $b into $a's document
function myimport[$a, $b]
{
  if [$a->ownerDocument->isSameNode[$b->ownerDocument]]
  {
    $temp = new DOMDocument[];
    $ret = $temp->importNode[$b, TRUE];
    return $a->ownerDocument->importNode[$ret, TRUE];
  }
  else
  {
    return $a->ownerDocument->importNode[$b, TRUE];
  }
}
?>

[Function was freshly coded for this note but I based it off another, working function of mine.]

This function checks if the documents are the same and uses a new document [guaranteed to be different this way] to force a copy into $temp and then force a copy back into $a->ownerDocument.

Obviously, no error checking has been done.

Creating innerHTML and outerHTML

class DOMHTMLElement extends DOMElement
{
    function __construct[] { parent::__construct[];}

________số 8

    public function outerHTML[]
    {
        $doc = new DOMDocument[];
        $doc->appendChild[$doc->importNode[$this, true]];
        $content = $doc->saveHTML[];
        return $content;
    }
}

If you expect importNode to give you a copy of the source [in this case, a deep copy] then you must account for them being from the same document.  This function addresses this:0

If you expect importNode to give you a copy of the source [in this case, a deep copy] then you must account for them being from the same document.  This function addresses this:1

If you expect importNode to give you a copy of the source [in this case, a deep copy] then you must account for them being from the same document.  This function addresses this:2

If you expect importNode to give you a copy of the source [in this case, a deep copy] then you must account for them being from the same document.  This function addresses this:3

If you expect importNode to give you a copy of the source [in this case, a deep copy] then you must account for them being from the same document.  This function addresses this:4

If you expect importNode to give you a copy of the source [in this case, a deep copy] then you must account for them being from the same document.  This function addresses this:5

If you expect importNode to give you a copy of the source [in this case, a deep copy] then you must account for them being from the same document.  This function addresses this:6

If you expect importNode to give you a copy of the source [in this case, a deep copy] then you must account for them being from the same document.  This function addresses this:7

  • If you expect importNode to give you a copy of the source [in this case, a deep copy] then you must account for them being from the same document.  This function addresses this:8

If you expect importNode to give you a copy of the source [in this case, a deep copy] then you must account for them being from the same document.  This function addresses this:9

// Import $b into $a's document
function myimport[$a, $b]
{
  if [$a->ownerDocument->isSameNode[$b->ownerDocument]]
  {
    $temp = new DOMDocument[];
    $ret = $temp->importNode[$b, TRUE];
    return $a->ownerDocument->importNode[$ret, TRUE];
  }
  else
  {
    return $a->ownerDocument->importNode[$b, TRUE];
  }
}
?>
0

    // Import $b into $a's document
    function myimport[$a, $b]
    {
      if [$a->ownerDocument->isSameNode[$b->ownerDocument]]
      {
        $temp = new DOMDocument[];
        $ret = $temp->importNode[$b, TRUE];
        return $a->ownerDocument->importNode[$ret, TRUE];
      }
      else
      {
        return $a->ownerDocument->importNode[$b, TRUE];
      }
    }
    ?>
    1

    // Import $b into $a's document
    function myimport[$a, $b]
    {
      if [$a->ownerDocument->isSameNode[$b->ownerDocument]]
      {
        $temp = new DOMDocument[];
        $ret = $temp->importNode[$b, TRUE];
        return $a->ownerDocument->importNode[$ret, TRUE];
      }
      else
      {
        return $a->ownerDocument->importNode[$b, TRUE];
      }
    }
    ?>
    2

// Import $b into $a's document
function myimport[$a, $b]
{
  if [$a->ownerDocument->isSameNode[$b->ownerDocument]]
  {
    $temp = new DOMDocument[];
    $ret = $temp->importNode[$b, TRUE];
    return $a->ownerDocument->importNode[$ret, TRUE];
  }
  else
  {
    return $a->ownerDocument->importNode[$b, TRUE];
  }
}
?>
3

// Import $b into $a's document
function myimport[$a, $b]
{
  if [$a->ownerDocument->isSameNode[$b->ownerDocument]]
  {
    $temp = new DOMDocument[];
    $ret = $temp->importNode[$b, TRUE];
    return $a->ownerDocument->importNode[$ret, TRUE];
  }
  else
  {
    return $a->ownerDocument->importNode[$b, TRUE];
  }
}
?>
4

// Import $b into $a's document
function myimport[$a, $b]
{
  if [$a->ownerDocument->isSameNode[$b->ownerDocument]]
  {
    $temp = new DOMDocument[];
    $ret = $temp->importNode[$b, TRUE];
    return $a->ownerDocument->importNode[$ret, TRUE];
  }
  else
  {
    return $a->ownerDocument->importNode[$b, TRUE];
  }
}
?>
5

// Import $b into $a's document
function myimport[$a, $b]
{
  if [$a->ownerDocument->isSameNode[$b->ownerDocument]]
  {
    $temp = new DOMDocument[];
    $ret = $temp->importNode[$b, TRUE];
    return $a->ownerDocument->importNode[$ret, TRUE];
  }
  else
  {
    return $a->ownerDocument->importNode[$b, TRUE];
  }
}
?>
6

// Import $b into $a's document
function myimport[$a, $b]
{
  if [$a->ownerDocument->isSameNode[$b->ownerDocument]]
  {
    $temp = new DOMDocument[];
    $ret = $temp->importNode[$b, TRUE];
    return $a->ownerDocument->importNode[$ret, TRUE];
  }
  else
  {
    return $a->ownerDocument->importNode[$b, TRUE];
  }
}
?>
7

// Import $b into $a's document
function myimport[$a, $b]
{
  if [$a->ownerDocument->isSameNode[$b->ownerDocument]]
  {
    $temp = new DOMDocument[];
    $ret = $temp->importNode[$b, TRUE];
    return $a->ownerDocument->importNode[$ret, TRUE];
  }
  else
  {
    return $a->ownerDocument->importNode[$b, TRUE];
  }
}
?>
8

// Import $b into $a's document
function myimport[$a, $b]
{
  if [$a->ownerDocument->isSameNode[$b->ownerDocument]]
  {
    $temp = new DOMDocument[];
    $ret = $temp->importNode[$b, TRUE];
    return $a->ownerDocument->importNode[$ret, TRUE];
  }
  else
  {
    return $a->ownerDocument->importNode[$b, TRUE];
  }
}
?>
9

Chủ Đề