Bir XPathExpression nesnesinde Microsoft XPath Extension İşlevlerini (ms: string-karşılaştırması http://msdn.microsoft.com/en-us/library/ms256114.aspx) kullanmaya çalışıyorum.XPathExpression İçinde ms: xpath işlevlerini kullanma
Bu işlevler MSXML kütüphane içinde uzantıları vardır ve ben bir XslCompiledTransform bunları kullanırsanız onlar Acayip işe (basitçe "msn" ad ekleme): Sonra
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);
Bir bunları kullanarak çalıştı 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);
Ama bir istisna olsun "XsltContext çünkü bilinmeyen bir fonksiyonun bu sorgu için gereklidir".
XsltContext, belirli bir XmlNamespaceManager'tır, ancak gerçek bir XslCompiledTransform (özet) olmadan bunu gerçekleştirmenin mümkün olup olmadığını ve bunu benim ifade bağlamım olarak kullanıp kullanamayacağımı bilmiyorum.
Bunu yapmak için herhangi bir yolu var mı (veya bir XPathExpression içinde ms: uzantıları kullanmak için başka bir yol)?
Mümkün edilebilir bir çözüm bekliyordum, ama bazıları sonra arama sizin için bir teklif buldum. Bu benim kendi değil, ben yorum olarak eklemek istiyorum [quote] Ne yazık ki XPathNavigator MIcrosoft ms: extention işlevlerini desteklemiyor, sadece XSLT bağlamında kullanılabilir. Bu uzantı işlevlerini XPathNavigator içine kancalamak için kullanabileceğiniz bir örnek kodu için http://www.tkachenko.com/blog/archives/000649.html adresine bakın. Oleg Tkachenko [XML MVP, MCPD] [endquote] Yani, kendi cevabım değil, yine de kullanabileceğiniz bir şey düşünüyorum. –
çok teşekkürler ... Bir şekilde bir XsltContext elde etmeyi umuyordum, ama bunu geçersiz kılmak ve tüm soyut yöntemleri uygulamak tek yol gibi görünüyor :-( – Filini