如何从大型XML文件中删除所有注释?

时间:2014-12-29 12:42:09

标签: php xml xmlreader

如何从大型XML文件中删除所有注释?

我有一个大文件XML,我想要简化它,我想删除所有注释。该文件的大小超过200 MB,解析文件和查询时需要花费很多时间。

解析代码是:

<?php

$dom    = new DOMDocument();
$xpath  = new DOMXPath($dom);
$reader = new XMLReader();
$reader->open('http://www.bookingassist.ro/test/HotelsPro.xml');

while ($reader->read()) {
    if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'Hotel') {
        $node = $dom->importNode($reader->expand(), true);
        $dom->appendChild($node);
        $result = $xpath->evaluate('string(self::Hotel[HotelCode = "'.$hotelCodes[3].'"]/HotelImages/ImageURL[1])', $node);
        $dom->removeChild($node);
        if ($result) {
            echo $result;

        }
    }
}
?>

1 个答案:

答案 0 :(得分:0)

假设Xslt是一个选项,您可以使用identity transform的修改版本,它将为任何匹配的comment投射任何内容:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="comment()"/>

</xsl:stylesheet>

Fiddle here