【问题标题】:Remove stylesheet from XML with PHP使用 PHP 从 XML 中删除样式表
【发布时间】:2022-01-24 14:35:47
【问题描述】:

我正在尝试使用我的自定义 stylesheet.xsl 为收到的意大利电子发票显示一些 XML

收到的 XML 以以下开头时一切正常

<?xml version="1.0" encoding="UTF-8"?>
<p:FatturaElettronica xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" versione="FPR12">

但我收到了一些以以下开头的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="fatturapa_v1.2.xsl"?>
<p:FatturaElettronica xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" versione="FPR12">

在这种情况下,当我尝试打开文件时出现浏览器错误,因为在我的 webapp 上我没有保存 fatturapa_v1.2.xml:

Error loading style sheet: XSLT style sheet interpretation failed.

有没有办法使用 PHP 从这个 XML 中只删除这一行?谢谢

<?xml-stylesheet type="text/xsl" href="fatturapa_v1.2.xsl"?>

【问题讨论】:

  • 您可以尝试使用SimpleXML。不过不确定它是如何处理样式表的。

标签: php xml


【解决方案1】:

DOM 中的一切都是一个节点。在这种情况下,这是一条处理指令。您可以使用 Xpath 找到它,然后将其从其父节点中删除:

$xml = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="fatturapa_v1.2.xsl"?>
<p:FatturaElettronica xmlns:p="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2" versione="FPR12"/>
XML;

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

foreach ($xpath->evaluate('/processing-instruction()[name() = "xml-stylesheet"]') as $pi) {
    // var_dump($pi);
    $pi->parentNode->removeChild($pi);
}

echo $document->saveXML();

【讨论】:

    猜你喜欢
    • 2016-06-17
    • 1970-01-01
    • 2015-06-23
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多