как сделать перекрестную ссылку на тег привязки?

XHTML:

<root>
<a href="1#fn1" class="fn-ref" id="s9781473910270.i11"><sup>1</sup></a>
<p>some text<a href="1#fnref1" id="s9781473910270.i237">↩</a></p>
</root>

Из приведенного выше примера, если href оба якоря одинаковы (как 1#fn1 а также 1#fnref1) потом придется обменять их ID's как их href и должны обернуть тег привязки (который имеет fnref в их href в нем) с <span class="label-fn"> тогда нужно установить class="ref-fn-ref" для этого тега привязки.

Ожидаемый результат:

<root>
<a href="#s9781473910270.i237" class="fn-ref" id="s9781473910270.i11"><sup>1</sup>
</a>
<p>sometext<span class="label-fn"><a href="#s9781473910270.i11" class="ref-fn-ref"id="s9781473910270.i237">↩</a></span></p>
</root>

Я пытался до сих пор,

libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTMLFile("sample.xhtml", LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xp = new DOMXPath($dom);
$xp->registerNamespace("php", "http://php.net/xpath");
$className="fn-ref";
$anchor1 = $xp->query("//[contains(@class, '$className')]");
//????

Я застрял между ними, я не знаю, как получить массив других тегов привязки, сопоставленных с массивом anchor1.

0

Решение

Сам разобрался, чтобы получить свой вывод.

$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xp = new DOMXPath($dom);
$xp->registerNamespace("php", "http://php.net/xpath");
$a1 = $xp->query("//*[contains(@class, 'fn-ref')]");
$a2 = $xp->query("//*[contains(@href, '#fnref')]");

foreach($a1 as $a1v) {
$id1=$a1v->getAttribute('id');
preg_match("/([\\d]+)#fn([\\d+])/s",$a1v->getAttribute('href'),$m1);
$href1=$m1[1]."#fnref".$m1[2];
foreach($a2 as $a2v) {
if($a2v->getAttribute('href')===$href1){
$id2=$a2v->getAttribute('id');
$a2v->setAttribute('class','ref-fn-ref');
$a2v->setAttribute('href',"#".$id1);
$a1v->setAttribute('href',"#".$id2);
break;
}
}
}
$r=$dom->saveXML();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]