我正在使用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封装的
答案 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
元素)那样容易修复它们