XsltTransform System. Xml .XPath.XPathException: «Выражение должно вычисляться как набор узлов». - PullRequest
0 голосов
/ 12 января 2020

У меня проблема с моим XSLT - Преобразованием . Вот как я создаю XSLT class

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);
        }
    }
}

In 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?

1 Ответ

1 голос
/ 12 января 2020

Глядя на https://docs.microsoft.com/en-us/dotnet/standard/data/xml/xsltargumentlist-for-style-sheet-parameters-and-extension-objects?view=netframework-4.8#xslt -style-sheet-parameters , единственный. NET тип, который можно увидеть XslTransform как набор узлов XSLT / XPath, равен XPathNodeIterator, так что способ передать XPathDocument in будет использовать doc2XPath.CreateNavigator().Select("/") в качестве аргумента для метода AddParam.

Также обратите внимание, что вы можете передать URL-адреса XSLT, а затем просто использовать XSLT document функция для загрузки документа.

Я думаю, что XslCompiledTransform немного более гибок (https://docs.microsoft.com/en-us/dotnet/standard/data/xml/xslt-parameters?view=netframework-4.8), когда речь идет о прямой передаче XPathDocument s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...