【问题标题】:how can I remove HTML comment-tag from XML data如何从 XML 数据中删除 HTML 注释标记
【发布时间】:2018-04-13 22:18:53
【问题描述】:

代码:

$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,惊人的 Fensterreinigungen und Frühjahrsputz

【问题讨论】:

  • 所以你也想删除中断标签?
  • 如果中断标签会中断,它们可以保留在那里。但目前它们以文本形式出现在输出中。

标签: php html json xml


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    试试这个。

    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"]));

    【讨论】:

      【解决方案3】:

      SimpleXML 是 DOM 之上的抽象,但在某些情况下,您需要降低一层。在 DOM 中,任何东西都是节点、元素、空格和 - 在这种情况下很重要 - cmets。所以你可以使用 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"
      

      【讨论】:

        猜你喜欢
        • 2023-02-01
        • 2016-11-05
        • 2010-12-24
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 2012-04-04
        • 1970-01-01
        相关资源
        最近更新 更多