xlst怎么传递不定的参数呢

yixuan178 2009-09-02 11:23:18
我想通过Javascript传递给xslt一些参数,这些参数的数目是不定,不知道如何实现。
哪位有这个经验的。
另外,不知道发布到这个版面对不对,我没有看到xslt相关的。
...全文
158 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yixuan178 2009-09-08
  • 打赏
  • 举报
回复
这个错误问题我知道了,因为我写了 paramVal1, 应改为paramVal。 这样就不会出错,但是值还是没有办法显示出来。
yixuan178 2009-09-08
  • 打赏
  • 举报
回复

var root = xml.createElement("root");
var node = xml.createElement("p1");
node.text = "11111111";
root.appendChild(node);

xsl = loadXMLDoc(params.xslDocURL);
xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
xsltProcessor.setParameter(null,"paramVal1", root);

//alert(xsltProcessor.getParameter(null, "paramVal1"));
//resultDocument = xsltProcessor.transformToDocument(xml);
resultDocument = xsltProcessor.transformToFragment(xml, document);


这个是在firefox下面的实现,但是这个在firefox下总是报错。
下面是firebug的提示:
[Exception... "Component returned failure code: 0x80600008 [nsIXSLTProcessor.transformToFragment]" nsresult: "0x80600008 (<unknown>)" location: "JS frame :: file:///C:/Documents%20and%20Settings/Administrator/Desktop/NGRT0901/js/xmlTransformUtils2.js :: doTransform :: line 200" data: no]

不知道哪里有问题。还有一个,我用transformToDocument无法得到内容。
yixuan178 2009-09-04
  • 打赏
  • 举报
回复
是的,我重新写了。root在firebug下面也产生了,但是xsl似乎没有得到这个值。
hookee 2009-09-04
  • 打赏
  • 举报
回复
不会更改原来的xml文件
ff 下要重新写了.
yixuan178 2009-09-04
  • 打赏
  • 举报
回复
多谢hookee,这个方法我在ie下可以了。这个好像会更改原来的xml文件吧?
另外,我在firefox下好像不行。
xsl = loadXMLDoc(params.xslDocURL);

var root = xml.createElement("root");
var node = xml.createElement("p1");
node.text = "fdfas";
root.appendChild(node);

xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
xsltProcessor.setParameter(null, "paramVal", root);
hookee 2009-09-03
  • 打赏
  • 举报
回复
用一下脚本,xslt中用<xsl:value-of select="$paramVal//p1"/>

var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
var xslProc;
xslDoc.async = false;
xslDoc.resolveExternals = false;
xslDoc.load("c:\\a.xsl");
xslt.stylesheet = xslDoc;
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
xmlDoc.async = false;
xmlDoc.resolveExternals = false;
xmlDoc.load("c:\\a.xml");
if (xmlDoc.parseError.errorCode != 0) {
var myErr = xmlDoc.parseError;
alert("You have error " + myErr.reason);
} else {
var root = xmlDoc.createElement("root");
var node = xmlDoc.createElement("p1");
node.text = "111111";
root.appendChild(node)
xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;
xslProc.addParameter("paramVal", root);
xslProc.transform();
alert(xslProc.output);
}



<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt">
<xsl:output method="html"/>
<xsl:param name="paramVal"/>
<xsl:template match="/">
<html>
<body>
<xsl:value-of select="$paramVal//p1"/>
<h2>My CD Collection</h2>
</body>
</html>
</xsl:template>
<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>
<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/>
</span>
<br/>
</xsl:template>
<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/>
</span>
<br/>
</xsl:template>
</xsl:stylesheet>

yixuan178 2009-09-03
  • 打赏
  • 举报
回复
Hello hookee,
我用了下面的xsl来尝试,不过总是不成功。不知道我写的是不是有问题。能否麻烦看一下。我的xml用的是w3cschool的xml和xsl。
http://www.w3schools.com/xsl/cdcatalog.xml


<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy? -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:param name="paramVal"/>
<html>
<body>
<h2>My CD Collection</h2>
<xsl:value-of select="$paramVal/p1">
<xsl:apply-templates/>
</body>
</html>
</xsl:template>

<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>

<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>

<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>

</xsl:stylesheet>

hookee 2009-09-03
  • 打赏
  • 举报
回复
<div>
<xsl:value-of select="$param//p1"/>
</div>
yixuan178 2009-09-03
  • 打赏
  • 举报
回复
hello hookee,
如何在xslt里面处理这个小xml片段呢?
我用param传递进去,不知道怎么去调用和使用。
多谢。
hookee 2009-09-02
  • 打赏
  • 举报
回复
可以把参数也写成一个xml ,在xslt中用document()引入,
或作为一个参数传入para,
xslt中
<temp>
<valueof $para>
<temp>
然后用select=temp/参数元素 取值
hookee 2009-09-02
  • 打赏
  • 举报
回复
使用js 用 addParameter方法传,
数组先转成xml格式的字符串,传递的是字符串

例子:
var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
var xslProc;
xslDoc.async = false;
xslDoc.resolveExternals = false;
xslDoc.load("sample.xsl");
xslt.stylesheet = xslDoc;
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
xmlDoc.async = false;
xmlDoc.resolveExternals = false;
xmlDoc.load("books.xml");
if (xmlDoc.parseError.errorCode != 0) {
var myErr = xmlDoc.parseError;
alert("You have error " + myErr.reason);
} else {
xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;
xslProc.addParameter("param1", "<root><p1>xxx</p1><p2>xxx</p2></root>");
xslProc.transform();
yixuan178 2009-09-02
  • 打赏
  • 举报
回复
hello hookee,
想问一下,第二个方式传入para的是数组吗?JS下面的。
就是一个Array()数组传递给para,让xslt valueof $para 读取,可以吗?

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧