Ich versuche, Microsoft XPath-Erweiterungsfunktionen (z. B. ms: string-compare http://msdn.microsoft.com/en-us/library/ms256114.aspx) in einem XPathExpression-Objekt zu verwenden.Verwendung von ms: XPath-Funktionen in XPathExpression
Diese Funktionen sind Erweiterungen innerhalb der MSXML-Bibliothek, und wenn ich sie in einem XslCompiledTransform verwenden (einfaches Hinzufügen der „ms“ Namespace) sie arbeiten wie ein Zauber:
var xsl =
@"
<?xml version=""1.0"" encoding=""UTF-8""?>
<xsl:stylesheet version=""2.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform""
xmlns:xs=""http://www.w3.org/2001/XMLSchema""
xmlns:fn=""http://www.w3.org/2005/xpath-functions""
xmlns:ms=""urn:schemas-microsoft-com:xslt"">
<xsl:output method=""xml"" version=""1.0"" encoding=""UTF-8"" indent=""yes""/>
<xsl:template match=""/Data"">
<xsl:element name=""Result"">
<xsl:value-of select=""ms:string-compare(@timeout1, @timeout2)""/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>";
var xslDocument = new XmlDocument();
xslDocument.LoadXml(xsl);
var transform = new XslCompiledTransform();
transform.Load(xslDocument);
Dann habe ich versucht, sie in einem mit XPathExpression:
XPathNavigator nav = document.DocumentElement.CreateNavigator();
XPathExpression expr = nav.Compile("ms:string-compare(/Data/@timeout1, /Data/@timeout2)");
XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
manager.AddNamespace("ms", "urn:schemas-microsoft-com:xslt");
expr.SetContext(manager);
nav.Evaluate(expr);
Aber ich erhalte eine Ausnahme „XsltContext ist für diese Abfrage benötigt aufgrund einer unbekannten Funktion“.
XsltContext ist ein spezifischer XmlNamespaceManager, aber ich weiß nicht, ob es möglich ist, es ohne eine tatsächliche XslCompiledTransform (es ist abstrakt) zu instanziieren und es als meinen Ausdruck Kontext zu verwenden.
Gibt es eine Möglichkeit, dies zu tun (oder eine andere Möglichkeit, ms: Erweiterungen in einem XPathExpression zu verwenden)?
ich eine Lösung erwarten wäre möglich, aber nach einigen Suche ich fand ein Angebot für Sie. Da dies nicht mein eigenes ist, füge ich es als Kommentar hinzu [quote] Leider XPathNavigator nicht unterstützt MIcrosoft ms: Erweiterung Funktionen, sie sind nur im XSLT-Kontext verfügbar. Werfen Sie einen Blick auf http://www.tkachenko.com/blog/archives/000649.html für einen Beispielcode, den Sie verwenden können, um diese Erweiterungsfunktionen in XPathNavigator einhängen. Oleg Tkachenko [XML MVP, MCPD] [endquote] Also, nicht meine eigene Antwort, aber immer noch etwas, was Sie verwenden könnte, denke ich. –
vielen Dank ... Ich hatte gehofft, irgendwie einen XsltContext instanziiert zu bekommen, aber es scheint der einzige Weg zu sein, es zu überschreiben und alle abstrakten Methoden zu implementieren :-( – Filini