1

編集PHP HTMLDomDocumentgetElementByIdの問題に関連

仕事に就けませんgetElementById()。W3Cバリデーターの使用によれば、ドキュメントは有効です。さらに、私のコードは少し無効なHTMLでも機能するはずです。

この単純なコードは、画像を検索し、その属性を別id="banner"の属性に置き換えます。src私の開発マシン(Windows)で動作しますが、サーバー(Ubuntu)では動作しません。

なしでこれを行う方法のアイデアはありますgetElementById()か?

    libxml_use_internal_errors(true);

    // Create the DOMDocument and get the HTML content
    $document = new \DOMDocument();

    // Load HTML string and if it fails just return the content itself
    if(false === $document->loadHTML($content)) return $content;

    // Get DOMElement of the image with id="banner"
    $img = $document->getElementById('banner');

    // Return the content if it can't find the image
    if(null === $img) return $content;

    // Get image parent and remove the banner from DOM
    $parent = $img->parentNode;
    $parent->removeChild($img);

    // Set the new src attribute
    $img->setAttribute('src', 'http://mysite.come/img/myimage.png');

    // Append the modified node to banner parent
    $parent->appendChild($img);

    return $document->saveHTML();
4

2 に答える 2

2

了解しました。どのように無効であるかわかりません-ドキュメントプルーフ:

$xpath = new \DOMXpath($document);
$nodes = $xpath->query('//img[@id="banner"]');

// Return content if we don't have exactly one image with id="banner"
if(1 !== $nodes->length) return $content;

// DOMNode of the banner
$banner = $nodes->item(0);

// Set the new src attribute and save the content
$banner->setAttribute('src', 'http://mysite.come/img/myimage.png');
$banner->ownerDocument->saveXML($banner);

return $document->saveXML();
于 2012-08-18T02:32:29.977 に答える
-2

DOMDocument::getElementById()ドキュメントから:

この関数を機能させるには、DOMElement :: setIdAttributeを使用していくつかのID属性を設定するか、属性をID型に定義するDTDを設定する必要があります。後者の場合、この関数を使用する前に、DOMDocument::validateまたはDOMDocument::$validateOnParseを使用してドキュメントを検証する必要があります。

于 2012-08-18T03:08:55.780 に答える