如何获取两个xml标记的内容,即使它们内部有另一个xml标记(PHP-xml)


How to get the content of two xml tags even when they have another xml tags inside them (PHP-XML)

简单地说,假设您有以下xml结构:

<TEXT>Well, I need some help as you <CUSTOMTAG>can</CUSTOMTAG> see.</TEXT>

在PHP中使用strip_tags()提取该节点的文本时,我没有得到标签的内容。

第一步:

我想做的是提取并因此具有以下字符串:

"好吧,正如你所看到的,我需要一些帮助。"

第二步:

我还想将<CUSTOMTAG></CUSTOMTAG>转换为其他内容,例如<e></e>,最后得到以下字符串:

"Well, I need some help as you <e>can</e> see."

我希望只有经过测试和工作的代码。

提前感谢!

亲切问候

对于第二部分,您可以使用类似的东西:

<?php
$xml = "<TEXT>Well, I need some help as you <CUSTOMTAG>can</CUSTOMTAG> see, <CUSTOMTAG>maybe</CUSTOMTAG>.</TEXT>";
//1st part:
$dom = new DOMDocument();
$dom->loadXML($xml);
$xPath = new DOMXPath($dom);
foreach ($xPath->query('//TEXT') as $textNode) {
  echo $textNode->textContent;
}
// 2nd part:
foreach ($xPath->query('//TEXT/CUSTOMTAG') as $find) {
  $find_value = $find->nodeValue;
  $replace = $dom->createDocumentFragment();
  $replace->appendXML('<e>'.$find_value.'</e>');
  $find->parentNode->insertBefore($replace, $find); 
  $parentnode = $find->parentNode;
  $parentnode->removeChild($find);
}
$result = $dom->saveHTML();
echo $result;
?>

对于第一步,只需使用以下代码:

<?php
$xml = "<TEXT>Well, I need some help as you <CUSTOMTAG>can</CUSTOMTAG> see.</TEXT>";
$domDoc  = new DOMDocument();
$domDoc->loadXML($xml);
$domXPath  = new DOMXPath($domDoc);
$textNodes = $domXPath->query('//TEXT');
foreach ($textNodes as $textNode) {
    echo $textNode->textContent;
}

第二步,看看这个答案https://stackoverflow.com/a/8164058/2000503.