【问题标题】:What has been changed in xml libraries for my code to crash?xml 库中发生了什么更改导致我的代码崩溃?
【发布时间】:2020-12-15 09:26:22
【问题描述】:

我开始更新一个旧项目。 用 centos7 PHP 7 就可以了,centos8 就没那么幸运了。库中可能有一些变化吗? 不过,我需要让它在 centos8 上运行。 我也不熟悉xsl。 代码中可能有什么问题?
Atm 两个地方都有 ** 抛出一个警告并且程序失败。

警告:XSLTProcessor::transformToXml():xsl:choose:xsl:当预期首先出现时

    **<xsl:template name="D_title"><xsl:choose>**
            <!--<xsl:when test="ver!=''">-->
            <xsl:when test="o='1'"><xsl:value-of select="concat('sometext: ',code)"/></xsl:when>
            <xsl:otherwise><xsl:value-of select="concat('sometext (edid: ',edid,')')"/></xsl:otherwise>
            
    </xsl:choose></xsl:template>
<xsl:template name="login">
    <xsl:choose>
        <xsl:when test="name">
            **<form name="logout" method="post">**
            <span><xsl:value-of select="name"/> <input type="submit" class="textBox" name="logout" value="Log out" /></span>
            </form>
        </xsl:when>
        <xsl:otherwise>
                <form name="login" method="post">
                    <xsl:if test="error"><span class="error_msg">error!</span></xsl:if>
                    USER: <input type="text" name="username" value="" size="14" maxlength="14" class="textBox" />
                    PW: <input type="password" name="password" size="14" maxlength="14" class="textBox" />
                    <input type="submit" class="textBox" name="login" value="Log in" />
                </form>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

渲染代码:

        $dom_el = dom_import_simplexml($this->sxe);

        $doc = new DOMDocument('1.0');
        $dom_node = $doc->importNode($dom_el, true);
        $dom_node = $doc->appendChild($dom_node);

        $xslt = new xsltProcessor;
        $xslt->importStyleSheet(DomDocument::load('xsl/template.xsl'));
        return $xslt->transformToXML($doc);

【问题讨论】:

  • 抱歉,您的代码看不到任何明显错误。尝试调查正在调用哪个版本的 libxslt 来执行 XSLT 转换。
  • 它有 libxslt 1.1.32-4.el8,还有 libxml2 2.9.7-7.el8。 Centos7 有 libxslt 1.1.28。我之前研究过,但无法做出任何假设。 centos8 也不提供我以前的版本。有趣的是,linksais libxslt 1.1.32 需要 libxml2-2.9.8。

标签: php xml xslt centos8


【解决方案1】:

我还偶然发现了与 libxslt 类似的问题(使用 libxml 20907、libxslt 10132)。似乎如果在标签 之间的 XSL(.xsl 文件)中留有任何空格,则会引发错误。

所以从 xsl:choose 元素中删除所有空格(包括 \n),然后重试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多