繁体   English   中英

PHP-DOMDocument-获取上一个元素及其数据属性

[英]PHP - DOMDocument - Get the previous element and his data attributes

您好,我正在尝试通过字符串管理DOMDocument。 我的字符串看起来像这样:

$String =
    <p>
        <div class="ST" data-start="1" data-end="5">
            <span>WORD1</span><span>WORD2</span>
        </div>
    </p>
    <p>
        WORD3 WORD4
    </p>
    <p>
        <div class="ST" data-start="6" data-end="10">
            <span>WORD5</span><span>WORD6</span>
        </div>
    </p>

我的目标是把话说WORD3WORD4<div>像标签WORD1 WORD2WORD5 WORD6第一个和最后一个<p>标签。 另外,我需要获取前一个p > div data-start data-end ,并data-end获得以下内容:

$String =
        <p>
            <div class="ST" data-start="1" data-end="5">
                <span>WORD1</span><span>WORD2</span>
            </div>
        </p>
        <p>
            <div class="ST" data-start="1" data-end="5">
                WORD3 WORD4
            </div>
        </p>
        <p>
            <div class="ST" data-start="6" data-end="10">
                <span>WORD5</span><span>WORD6</span>
            </div>
        </p>

我设法将WORD3和WORD4放在<div>但我不知道如何获取先前的元素p > div并获取其属性data-startdata-end ...

我的代码:

public function reverseTransform($value) {

    $dom = new DOMDocument();
    $dom->preserveWhiteSpace = false;
    $dom->formatOutput = true;
    $dom->loadHTML($value); 

    $pTags = $dom->getElementsByTagName('p');

    $TagFull='';
    foreach ($pTags as $pTag) {
            $valuePTagFull = $this->DOMinnerHTML($pTag);
            if (strpos($valuePTagFull,'<div') === false) {
                $valuePTagFull = "<div class='st'>".$valuePTagFull."</div>";
            }
            $TagFull .= $valuePTagFull;

        }
    }

private function DOMinnerHTML(DOMNode $element)
    {
        $innerHTML = "";
        $children = $element->childNodes;
        foreach ($children as $child) {
            $innerHTML .= $element->ownerDocument->saveHTML($child);
        }
        return $innerHTML;
    }

事实上,对于每个<p>具有WORDx进入但不<div>我包裹WORDx在一个<div>data-startdata-end的属性之前的<p> >> <div>

但是,如何使用DOM,XML或其他方式从上一个元素中选择和获取属性呢?

谢谢!

我想您可以使用正则表达式获得start end的最后一个值,但是不会使用DOM。

if (strpos($valuePTagFull,'<div') === false) {
                $valuePTagFull = "<div class='st' data-start=".$matches[1]." data-end=".$matches[2].">".$valuePTagFull."</div>";
            }
            else{
                preg_match('~<div[^>]*?class="ST"[^>]*?data-start="(\d*?)" data-end="(\d*?)">~',$valuePTagFull,$matches);
            }
            $TagFull .= $valuePTagFull;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM