首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从XML数据中删除HTML注释标记

如何从XML数据中删除HTML注释标记
EN

Stack Overflow用户
提问于 2017-11-01 22:48:40
回答 3查看 106关注 0票数 0

代码:

代码语言:javascript
复制
$string = htmlspecialchars($vakanz["stellenbeschrieb"]);
echo $string;

输出:

代码语言:javascript
复制
<!-- Haushalthilfe, stundenweise<br /> <br /> Fensterreinigungen und Fr&uuml;hjahrsputz<br /> -->

数据来自一个web应用程序,我使用以下代码获取内容:

代码语言:javascript
复制
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时,我可以看到从中获得此输出的字段中恰好包含此信息。

代码语言:javascript
复制
<stellenbeschrieb>
    <!-- Haushalthilfe, stundenweise<br /> <br /> Fensterreinigungen und Fr&uuml;hjahrsputz<br /> -->
</stellenbeschrieb>

我的问题是:如果没有HTML标记,我如何修改它才能得到这样的输出: Haushalthilfe,stundenweise Fensterreinigungen Frühjahrsputz

EN

回答 3

Stack Overflow用户

发布于 2017-11-01 23:15:25

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

代码语言:javascript
复制
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);

票数 0
EN

Stack Overflow用户

发布于 2017-11-01 23:21:32

试试这个吧。

代码语言:javascript
复制
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"]));

票数 0
EN

Stack Overflow用户

发布于 2017-11-02 17:18:22

SimpleXML是DOM之上的抽象,但在某些情况下,您需要更低的级别。在DOM中,任何东西都是节点、元素、空格以及注释(在本例中很重要)。因此,您可以使用Xpath获取注释节点:

代码语言:javascript
复制
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

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

输出:

代码语言:javascript
复制
string(90) " Haushalthilfe, stundenweise<br /> <br /> Fensterreinigungen und Fr&uuml;hjahrsputz<br /> "

注释中的文本是一个HTML片段。如果您将其加载到第二个DOM中,默认情况下,它将添加htmlbody标记,但这使得只获取文本很容易-没有标记,具有解码的html实体:

代码语言:javascript
复制
$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)')); 
}

输出:

代码语言:javascript
复制
string(65) "Haushalthilfe, stundenweise Fensterreinigungen und Frühjahrsputz"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47057554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档