【问题标题】:How to get the content of two xml tags even when they have another xml tags inside them (PHP-XML) [duplicate]即使它们内部有另一个xml标签(PHP-XML)[重复],如何获取两个xml标签的内容
【发布时间】:2013-06-29 16:19:18
【问题描述】:

简单来说,假设你有以下xml结构:

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

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

第一步:

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

“好吧,正如你所见,我需要一些帮助。”

第二步:

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

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

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

提前致谢!

亲切的问候

【问题讨论】:

  • “我只感谢经过测试和工作的代码。” Harry,因此,我们感谢您尝试自己编写代码并展示您的尝试。这不是“订购代码”。

标签: php xml


【解决方案1】:

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

<?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;
?>

【讨论】:

  • 感谢您的回答! :-)
  • 不客气。该代码可能不是最简洁的,但它可以工作(也适用于&lt;CUSTOMTAG&gt; 的多个实例)
【解决方案2】:

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

<?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

【讨论】:

  • 感谢您的回答! :-) 是否有可能通过使用 SimpleXML 来实现相同的结果?
  • 不是我知道的,我大部分时间都使用 PHP SimpleXML 我必须处理 XML,但在这种情况下我认为 DOMDocument 更适合。
  • 非常感谢伙计!你们俩都非常有帮助!干杯!
猜你喜欢
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 2012-12-03
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
相关资源
最近更新 更多