0

如果我想将文档加载到变量中,我可以使用

<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&param2=val2')" />

=> 不起作用 - EntityRef: 期待 ';'

<xsl:variable name="var2" select="document('http://www.mySite.com/getfile.cgi?param1=val1&amp;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&amp;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&amp;p2=v2:1: parser error : Document is empty 
in <b>/home/.../myPhpFile.php</b> on line <b>16</b><br />
4

1 回答 1

0

将 & 编码为 & 是正确的方法,处理器检索到的 URL 将是具有 val1¶m2 的正确 URL。我怀疑 :1: 不是 URL 的一部分,而是警告消息的一部分,即 :: 的问题

于 2014-05-13T20:56:39.487 回答