如果我想将文档加载到变量中,我可以使用
<xsl:variable name="var1" select="document('http://www.mySite.com/file1.xml')" />
=> 有效,我可以使用 -
<xsl:value-of select="$var1//myNodeName"/>
但现在我需要使用带参数的 URL。并且以下测试不起作用 -
<xsl:variable name="var2" select="document('http://www.mySite.com/getfile.cgi?param1=val1¶m2=val2')" />
=> 不起作用 - EntityRef: 期待 ';'
<xsl:variable name="var2" select="document('http://www.mySite.com/getfile.cgi?param1=val1&param2=val2')" />
=> 不起作用 - 警告错误的 URL - http://www.mySite.com/getfile.cgi?param1=val1¶m2=val2:1:为什么要添加 :1: ???
我的问题: 如何替换 & 实体以使document()函数工作?
更新:根据 - http://our.umbraco.org/forum/developers/xslt/5421-Ampersand-in-XSLT 解决方案是将 URL 存储为变量,然后输出它禁用输出转义。例如
<xsl:variable name="test" select="http://www.mysite.com/mypage.aspx?param1=1&param2=2" />
<xsl:value-of select="$test" disable-output-escaping="yes" />
但是,如何使用 document() 参数应用此解决方案?
更新 2:
我使用 PHP 解析它 -
<?php
Header('Content-type: text/xml');
// http://php.net/manual/en/xsltprocessor.transformtoxml.php
$xml = new DOMDocument;
$xml->load('http://www.mySite.com/devices.xml');
$xsl = new DOMDocument;
$xsl->load('mergedocs.xsl');
// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules
echo $proc->transformToXML($xml);
?>
我得到的错误 [注意 URL 中的放大器]:
XML Parsing Error: junk after document element
Location: http://mySite/myPhpFile.php
Line Number 2, Column 1:<b>Warning</b>: XSLTProcessor::transformToXml() [<a href='xsltprocessor.transformtoxml'>xsltprocessor.transformtoxml</a>]:
http://siteIp/cgi-bin/getfile.cgi?p1=v1&p2=v2:1: parser error : Document is empty
in <b>/home/.../myPhpFile.php</b> on line <b>16</b><br />