PHP XSLTProcessor剥离样式属性和标签

时间:2019-03-08 17:34:33

标签: php css xslt

我有这个XSLT

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output encoding="iso-8859-1" method="html"/>
  <xsl:template match="/">
    <img src='http://www.acentroservices.it/wp-content/uploads/2018/02/document.jpg' style="border: 1px solid black"/>
    <style>
      img {
        width: 100%
      }
    </style>
    <xsl:if test="count(list/*) &gt; 0">
      <h2>Ci sono <xsl:value-of select="count(list/element)" />  elementi!</h2>
    </xsl:if>
    <xsl:if test="count(list/*) = 0">
      <h2>Niente!</h2>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

我用来转换XML

<list><element><id>2</id><uuid>96506f09-eb04-46a2-af86-42fe9c6767ce</uuid><langcode>it</langcode><type>stu_pratica</type><user_id>1</user_id><name>a</name><status>1</status><created>1552053309</created><changed>1552053331</changed><unique_key>a</unique_key><users>admin</users><xml_content></xml_content><default_langcode>1</default_langcode><field_stu_pratica_classe_proc></field_stu_pratica_classe_proc><field_stu_pratica_data_atto></field_stu_pratica_data_atto><field_stu_pratica_data_fine></field_stu_pratica_data_fine><field_stu_pratica_data_inizio></field_stu_pratica_data_inizio><field_stu_pratica_d_protocollo></field_stu_pratica_d_protocollo><field_stu_pratica_ente></field_stu_pratica_ente><field_stu_pratica_esito></field_stu_pratica_esito><field_stu_pratica_indirizzo></field_stu_pratica_indirizzo><field_stu_pratica_lat></field_stu_pratica_lat><field_stu_pratica_lon></field_stu_pratica_lon><field_stu_pratica_nome_proc></field_stu_pratica_nome_proc><field_stu_pratica_num_atto></field_stu_pratica_num_atto><field_stu_pratica_n_protocollo></field_stu_pratica_n_protocollo><field_stu_pratica_primo_int></field_stu_pratica_primo_int><field_stu_pratica_resp_unico></field_stu_pratica_resp_unico><field_stu_pratica_stato></field_stu_pratica_stato><field_stu_pratica_wkid></field_stu_pratica_wkid><field_stu_pratica_x></field_stu_pratica_x><field_stu_pratica_y></field_stu_pratica_y></element></list>

但是,我以任何方式尝试执行转换:  -从每个可能的标签中删除了样式属性  -样式标签已删除,但内容不包含

这仅在PHP XSLTProcessor中发生,我使用的任何在线工具都保留了CSS指令。

如何在输出中保留CSS指令? 为什么仅在PHP XSLTProcessor中而不在在线工具中发生这种情况?

感谢大家的帮助。

编辑:

这是我用来进行转换的PHP代码:

    $output = new \DOMDocument();
    $output->loadXML(utf8_encode($body)); // For the XML 

    $xslt = new \XSLTProcessor();
    $xsl = new \DOMDocument();  // For the XSLT Template

    $xsl->load($xslt_path, LIBXML_NOCDATA);
    $xsl->formatOutput = TRUE;
    $xslt->importStylesheet($xsl);
// Setting some parameters, shouldn't have to do with the css problems i think... 
    $xslt->setParameter('', 'base_url', $base_url);
    $auth_url = Url::fromRoute('stu_botfo.view_authenticated_element', ['bundle' => $bundle, 'id' => ''], ['absolute' => TRUE]);
    $xslt->setParameter('', 'view_authenticated_element_link', $auth_url->toString() . '/');
    $anon_url = Url::fromRoute('stu_botfo.view_anonymous_element', ['bundle' => $bundle, 'id' => ''], ['absolute' => TRUE]);
    $xslt->setParameter('', 'view_anonymous_element_link', $anon_url->toString() . '/');
    $xslt->setParameter('', 'map_url', $map_url);
    return $xslt->transformToXML($output);

2 个答案:

答案 0 :(得分:0)

解决了,非常感谢大家。 事实证明这不是XSLTProcessor的错误,但是我不知道的某些HTML过滤器是在渲染过程的后期发生的,非常抱歉,您以前没有考虑过。

答案 1 :(得分:-1)

在大多数情况下,如果希望将HTML作为输出,则最好直接在PHP XSLTProcessor中使用transformToXML()。您可以更好地控制xsl:output属性。

我不确定您是否直接在PHP代码中调用transformToDoc()