PHP生成的.xml文件缺少.xsl格式

时间:2018-06-11 09:22:54

标签: php xml xslt sitemap

我使用php使用以下代码生成xml站点地图:

$number = $_GET['number'];
$sitemap = 'http://example.com/'.$number.'.txt';
$domain = $_SERVER['SERVER_NAME'];
$last_modification = "17.05.2018";
$change_frequency = "daily";
$priority = "1";

$content = file_get_contents($sitemap);
$content = str_replace("\r", "", $content);
$links = explode("\n", $content);
    ob_start(); 
    echo '<?xml version="1.0" encoding="UTF-8"?>'. "\n";
    echo '<?xml-stylesheet type="text/xsl" href="http://'.$domain.'/sitemap.xsl"?>' ."\n";
    echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:xhtml="http://www.w3.org/1999/xhtml">'. "\n";
    foreach($links as $link) {
    $link = str_replace(" ", "-", $link);
    $link.=".pdf";
    ?>
    <url>
        <loc><?php echo 'http://'.$domain.'/0/'.$link; ?></loc>
        <lastmod><?php echo $last_modification; ?></lastmod>
        <changefreq><?php echo $change_frequency; ?></changefreq>
        <priority><?php echo $priority; ?></priority>
    </url>
    <?
    }
    echo '</urlset>';
    $file_contents = ob_get_contents();
    ob_end_clean();
echo $file_contents;    

它只是从位于某处的txt链接文件生成xml站点地图。我面临的问题是<?xml-stylesheet type="text/xsl" href="http://'.$domain.'/sitemap.xsl"?>没有将样式和布局应用到我的xml中。地址是正确的,如果我上传只是生成的xml文件到服务器上的文件一切正常,但一旦我尝试在线生成它只是未格式化的站点地图。

供您参考,请在下面找到xls代码:

&#13;
&#13;
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" 
                xmlns:html="http://www.w3.org/TR/REC-html40"
                xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:template match="/">
		<html xmlns="http://www.w3.org/1999/xhtml">
			<head>
				<title>XML Sitemap</title>
				<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
				<style type="text/css">
					body {
						font-family:"Lucida Grande","Lucida Sans Unicode",Tahoma,Verdana;
						font-size:13px;
					}
					
					#intro {
						background-color:#CFEBF7;
						border:1px #2580B2 solid;
						padding:5px 13px 5px 13px;
						margin:10px;
					}
					
					#intro p {
						line-height:	16.8667px;
					}
					
					td {
						font-size:11px;
					}
					
					th {
						text-align:left;
						padding-right:30px;
						font-size:11px;
					}
					
					tr.high {
						background-color:whitesmoke;
					}
					
					#footer {
						padding:2px;
						margin:10px;
						font-size:8pt;
						color:gray;
					}
					
					#footer a {
						color:gray;
					}
					
					a {
						color:black;
					}
				</style>
			</head>
			<body>
				<h1>XML Sitemap</h1>
				<div id="intro">
					<p>
						This is a XML Sitemap which is supposed to be processed by search engines like <a href="http://www.google.com">Google</a>, <a href="http://search.msn.com">MSN Search</a> and <a href="http://www.yahoo.com">YAHOO</a>.<br />
						You can find more information about XML sitemaps on <a href="http://sitemaps.org">sitemaps.org</a> and Google's <a href="http://code.google.com/sm_thirdparty.html">list of sitemap programs</a>.
					</p>
				</div>
				<div id="content">
					<table cellpadding="5">
						<tr style="border-bottom:1px black solid;">
							<th>URL</th>
							<th>Priority</th>
							<th>Change Frequency</th>
							<th>LastChange (GMT)</th>
						</tr>
						<xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
						<xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
						<xsl:for-each select="sitemap:urlset/sitemap:url">
							<tr>
								<xsl:if test="position() mod 2 != 1">
									<xsl:attribute  name="class">high</xsl:attribute>
								</xsl:if>
								<td>
									<xsl:variable name="itemURL">
										<xsl:value-of select="sitemap:loc"/>
									</xsl:variable>
									<a href="{$itemURL}">
										<xsl:value-of select="sitemap:loc"/>
									</a>
								</td>
								<td>
									<xsl:value-of select="concat(sitemap:priority*100,'%')"/>
								</td>
								<td>
									<xsl:value-of select="concat(translate(substring(sitemap:changefreq, 1, 1),concat($lower, $upper),concat($upper, $lower)),substring(sitemap:changefreq, 2))"/>
								</td>
								<td>
									<xsl:value-of select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))"/>
								</td>
							</tr>
						</xsl:for-each>
					</table>
				</div>
			</body>
		</html>
	</xsl:template>
</xsl:stylesheet>
&#13;
&#13;
&#13;

请告诉我在哪里寻找解决方案,并提前感谢您的帮助!

0 个答案:

没有答案