मेरे पास 'उल' के बिना इस अच्छे-बुरे मार्कअप के साथ एक HTML-दस्तावेज़ है:

<p>Lorem</p>
<p>Ipsum...</p>
<li class='item'>...</li>
<li class='item'>...</li>
<li class='item'>...</li>
<div>...</div>

मैं अब सभी ली-एलिमेंट्स को "हथियाने" की कोशिश कर रहा हूं और उन्हें एक उल-सूची के अंदर लपेटता हूं, जिसे मैं उसी स्थान पर रखना चाहता हूं, जो PHP और DOMXPath का उपयोग कर रहा है। मैं ली-एलिमेंट्स को खोजने और "हटाने" का प्रबंधन करता हूं:

$elements =  $xpath->query('//li[@class="item"]');

$wrapper = $document->createElement('ul');
foreach($elements as $child) {
    $wrapper->appendChild($child);
}
2
chrney 25 नवम्बर 2015, 22:41

2 जवाब

सबसे बढ़िया उत्तर

हो सकता है कि आप पहले <li> का parentNode प्राप्त करें और फिर insertBefore विधि का उपयोग करें:

$html = <<<HTML
<p>Lorem</p>
<p>Ipsum...</p>
<li class='item'>...</li>
<li class='item'>...</li>
<li class='item'>...</li>
<div>...</div>
HTML;
$doc = new DOMDocument();
$doc->loadHTML($html);

$xpath = new DOMXpath($doc);

$elements = $xpath->query('//li[@class="item"]');

$wrapper = $doc->createElement('ul');
$elements->item(0)->parentNode->insertBefore(
    $wrapper, $elements->item(0)
);

foreach($elements as $child) {
    $wrapper->appendChild($child);
}

echo $doc->saveHTML();

डेमो

1
The fourth bird 25 नवम्बर 2015, 21:41

यहाँ आपको क्या चाहिए। आपको अपने वास्तविक HTML के लिए XPath क्वेरी को ट्वीक करने की आवश्यकता हो सकती है।

$document = new DOMDocument;

// We don't want to bother with white spaces
$document->preserveWhiteSpace = false;

$html = <<<EOT
<p>Lorem</p>
<p>Ipsum...</p>
<li class='item'>...</li>
<li class='item'>...</li>
<li class='item'>last...</li>
<div>...</div>
EOT;

$document->LoadHtml($html);

$xpath = new DOMXPath($document);

$elements =  $xpath->query('//li[@class="item"]');

// Saves a reference to the Node that is positioned right after our li's
$ref = $xpath->query('//li[@class="item"][last()]')->item(0)->nextSibling;

$wrapper = $document->createElement('ul');
foreach($elements as $child) {
    $wrapper->appendChild($child);
} 

$ref->parentNode->insertBefore($wrapper, $ref);

echo $document->saveHTML();

चल उदाहरण: https://repl.it/B3UO/24

0
Lucas Pottersky 26 नवम्बर 2015, 00:55