【发布时间】:2020-04-29 03:36:03
【问题描述】:
我的 XSLT - 转换 有问题。这就是我创建 XSLT 类
的方式XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultCredentials;
var xslt = new XslTransform();
xslt.Load(_xslPath, resolver);
using (StringReader sr = new StringReader(myXml))
{
XPathDocument doc = new XPathDocument(sr);
using (var sw = new StringWriter())
{
var argList = new XsltArgumentList();
var doc2 = File.ReadAllText("D:\\test\\Doc2.xml");
using (StringReader sr2 = new StringReader(doc2))
{
XPathDocument doc2XPath = new XPathDocument(sr2);
argList.AddParam("doc2", "", doc2XPath);
xslt.Transform(doc, argList, sw);
}
}
}
在 XSLT 我有这样的电话:
<xsl:call-template name="docBody">
<xsl:with-param name="doc" select="$doc2/myDoc"/>
<xsl:with-param name="docNr" select="$doc2Nr"/>
</xsl:call-template>
当 XSLT 调用 Transform 它给了我:
System.Xml.XPath.XPathException: '表达式必须计算为节点集。'
如何将另一个 XML 作为参数传递以使其仅使用 XslTransform 工作?
【问题讨论】:
-
你在
<xsl:with-param name="doc" select="$doc2/myDoc"/>那一行得到错误吗?如果您改用argList.AddParam("doc2", "", doc2XPath.CreateNavigator());,它会起作用吗? docs.microsoft.com/en-us/dotnet/standard/data/xml/… 似乎暗示 XPathNavigator 可以工作。或者你甚至可能需要使用doc2XPath.CreateNavigator().Select("/")来传递一个节点迭代器。我认为 XslCompiledTransform 更灵活一些。