如何删除transformiix:导致firefox

时间:2017-07-19 14:05:59

标签: xml xslt transform

我正在使用xslt styelsheets应用于xml,chrome和ie正确渲染,但firefox似乎添加了xml标签

transformiix:result

如何在Firefox中删除此内容。它影响了我的javascript。我试图解决它,但它不再工作

解决方法

if($('body').length == 0){ // firefox is transforming xsl differently so this fix is needed
        var head = $("#top_section")
        var $set = $( document ).children();
        $set = $set.children();
        for(var i=1, len = $set.length; i < len; i +=5){
            $set.slice(i, i+6).wrapAll('<body />');
        }
    }

更新

我用apache运行php7。

XML

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/xslt/user_services_owners.xsl"?>
<response>
  <header>
    <error>false</error>
    <message>success</message>
    <api_status>1</api_status>
    <api_response>success</api_response>
    <http_status>200</http_status>
    <http_response>ok</http_response>
    <format>xml</format>
    <csrf>946dc689cae6c5d0ae3fcf01de951493</csrf>
    <token>946dc689cae6c5d0ae3fcf01de951493</token>
    <user>UddinS2</user>
    <title>Manage Service, Project, Programme</title>
    <description>List, add, edit, and remove services, projects and programmes</description>
    <nav>
      <container>
        <title>Users</title>
        <link>#</link>
        <theme>#007c92</theme>
        <sub_modules>
          <title>Getting Started</title>
          <link>#</link>
          <theme>#007c92</theme>
          <menuitem>
            <title>File - CM Template v6.3</title>
            <link>/library/templates/FW-LB-CommsMatrix-Template-v6.3.xls</link>
          </menuitem>
          <menuitem>
            <title>Sudo Group Access</title>
            <link>/sudo_group_access.php?csrf=946dc689cae6c5d0ae3fcf01de951493</link>
          </menuitem>
        </sub_modules>
      </container>
    </nav>
    <server>1</server>
    <version>5.1</version>
  </header>
  <body>
    <recordset>
      <record>
        <ID>121</ID>
        <SERVICE_ID>201</SERVICE_ID>
        <NAME>UddinS2</NAME>
        <TYPE>owner</TYPE>
        <SERVICE>* Ad-hoc Submission</SERVICE>
      </record>
      <metadata>
        <num_rows>1</num_rows>
      </metadata>
    </recordset>
  </body>
</response>

/xslt/user_services_owners.xsl

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

    <xsl:import href="header.xsl" />

    <!-- <xsl:output method="html" encoding="UTF-8" omit-xml-declaration="yes"  indent="no" media-type="text/html" />-->
    <xsl:output method="html" indent="yes" encoding="iso-8859-1" media-type="html" doctype-public="-//W3C//DTD HTML 4.0//EN" />

    <xsl:template match="body">

        <!-- Page Content -->
        <div id="page-content-wrapper">
            <div class="container-fluid">
            </div>

        </div>

        <!-- content of other element -->
        <xsl:apply-templates select="footer" />
    </xsl:template>

</xsl:stylesheet>

header.xsl

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

    <!-- header.xsl -->
    <xsl:template match="header">
        <!-- content of header -->
        <HEAD>
       </HEAD>

        <div class="container-fluid" id="top_section">
        </div>
        <!-- Sidebar -->
        <div id="sidebar-wrapper" class="hidden-print">
        </div>
        <!-- Modal -->
        <div id="myModalError" class="modal fade" role="dialog">
        </div>
</xsl:template>


    <xsl:template name="footer">
        <FOOTER>

        </FOOTER>
    </xsl:template>

</xsl:stylesheet>

在firefox中,我在使用我的解决方法后会看到以下代码。

<transformiix:result><head>....</head><body>....</body></transformiix:result>

我正在使用php生成我上面放的那个回复到浏览器的xml。浏览器转换样式表,仅在firefox中document.ready触发变通方法,它将div放在body标记内的正确位置。没有它没有身体标签。问题是:jquery无法定位body,因为它是用firefox中的transformiix封装的

1 个答案:

答案 0 :(得分:1)

您当前的XSLT不会创建HTML根元素,因此请将主样式表更改为例如

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

    <xsl:import href="header.xsl" />


    <xsl:output method="html" indent="yes" doctype-system="about:legacy-doctype"/>

    <xsl:template match="/">
      <html>
        <xsl:apply-templates/>
      </html>
    </xsl:template>

    <xsl:template match="body">

        <!-- Page Content -->
        <div id="page-content-wrapper">
            <div class="container-fluid">
            </div>

        </div>

        <!-- content of other element -->
        <xsl:apply-templates select="footer" />
    </xsl:template>

</xsl:stylesheet>

这应该避免添加transformiix:result元素的问题。我认为您的方法存在其他问题,这些问题不会产生有效的HTML,但是它们并不像您希望从标题和正文的不同模板中输出HTML结果元素(如div元素)那样容易修复它们