如何从XML数据中删除HTML comment-tag

时间:2017-11-01 14:48:40

标签: php html json xml

代码:

$string = htmlspecialchars($vakanz["stellenbeschrieb"]);
echo $string;

输出:

<!-- Haushalthilfe, stundenweise<br /> <br /> Fensterreinigungen und Fr&uuml;hjahrsputz<br /> -->

数据来自网络应用程序,我在其中获得以下代码的内容:

function getVakanzDetail() 
{
    $vakanzId = $_GET['nummer'];
    $apiUrl = getApiUrl('vakanzDetail');
    $rawXml = file_get_contents($apiUrl . $vakanzId);
    $xmlElement = simplexml_load_string($rawXml, "SimpleXMLElement", LIBXML_NOCDATA);
    $json = json_encode($xmlElement);
    $data = json_decode($json, true);

    $vakanz = $data['vakanz'];

    foreach ($vakanz as $key => $value) {
        if ($value === []) {
            $vakanz[$key] = '';
        }
    }

    return $vakanz;
}

当我直接查看xml时,我可以看到从中获取此输出的字段内部具有完全相同的信息。

<stellenbeschrieb>
    <!-- Haushalthilfe, stundenweise<br /> <br /> Fensterreinigungen und Fr&uuml;hjahrsputz<br /> -->
</stellenbeschrieb>

我的问题是:如何在没有HTML标记的情况下修改此输出以获得这样的输出: Haushalthilfe,stundenweise FensterreinigungenundFrühjahrsputz

3 个答案:

答案 0 :(得分:0)

您可以将以下逻辑应用于从外部源获取的xml字符串。

&#13;
&#13;
var commenttag = "<!-- Haushalthilfe, stundenweise<br /> <br /> Fensterreinigungen und Fr&uuml;hjahrsputz<br /> -->";

var newtext = commenttag.replace(/<!--/g,"").replace(/<br\s*[\/]?>/g,"").replace(/-->/g,"");

console.log(newtext);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

试试这个。

function remove($str){
    $str = str_replace("<!--", "",$str);
    $str = str_replace("-->", "",$str);
    return $str;
}
$str = "<!-- Haushalthilfe, stundenweise<br /> <br /> Fensterreinigungen und Fr&uuml;hjahrsputz<br /> -->";
echo strip_tags(remove($str));

这个简单的函数remove()将删除开始和结束注释。

strip_tags()从字符串中删除所有html标记。

添加remove()功能后,请在代码中尝试此操作。

echo strip_tags(remove($vakanz["stellenbeschrieb"]));

答案 2 :(得分:0)

SimpleXML是DOM之上的抽象,但在某些情况下,您需要降低级别。在DOM中,任何东西都是节点,元素,空格和 - 在这种情况下很重要 - 注释。因此,您可以使用Xpath来获取注释节点:

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

foreach ($xpath->evaluate('//stellenbeschrieb/comment()') as $comment) {
  var_dump($comment->textContent);
}

输出:

string(90) " Haushalthilfe, stundenweise<br /> <br /> Fensterreinigungen und Fr&uuml;hjahrsputz<br /> "

评论中的文字是一个HTML片段。如果您将其加载到第二个DOM中,默认情况下会添加htmlbody标记,但这样可以轻松获取文本 - 没有标记和已解码的html实体:

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

foreach ($xpath->evaluate('//stellenbeschrieb/comment()') as $comment) {

  $htmlDocument = new DOMDocument();
  $htmlDocument->loadHtml($comment->textContent);
  $htmlXpath = new DOMXpath($htmlDocument);

  var_dump($htmlXpath->evaluate('string(//body)')); 
}

输出:

string(65) "Haushalthilfe, stundenweise Fensterreinigungen und Frühjahrsputz"