2008-12-13 22 views
10

.NET cho phép mở rộng XSLT bằng cách sử dụng đối tượng mở rộng được gọi là. Rất tiện dụng và rất tiện lợi. Bạn làm như vậy bằng cách tạo ra một lớp:Các loại trả về .NET được phép từ phương thức đối tượng mở rộng XSLT là gì?

public class VeryHandyExtensionFunctions 
{ 
    public string VerySmartStringConcat(XPathNodeIterator NodeList) 
    { 
     return "some very smart string concat based on NodeList"; 
    } 
} 

cấp phát một số kỳ diệu (xem dưới đây), bạn có thể tham khảo VerySmartStringConcat như một phần của XSLT của bạn:

<xsl:value-of select="someprefix:VerySmartStringConcat(nodes[@withsomeattribute])"/> 

Điều duy nhất cần làm để làm cho nó xảy ra là để vượt qua một thể hiện của lớp mở rộng của bạn (VeryHandyExtensionFunctions ở trên) để lớp XslCompiledTransform, sử dụng một XsltArgumentList:

XsltArgumentList xsltArg = new XsltArgumentList(); 
xsltArg.AddExtensionObject("SomeUriResolvingToSomePrefix",new VeryHandyExtensionFunctions); 
XslCompiledTransform xslTransform; 
XmlWriter W = XmlWriter.Create(SomeTarget, Xslt.OutputSettings); 
xslTransform.Transform(SomeXmlDocument, xsltArg, W); 

NET là khá thông minh trong việc tìm ra ho w để chuyển đổi các kiểu XML thành các tham số đầu vào & các kiểu trả về của các hàm mở rộng. Tuy nhiên, thỉnh thoảng nó phàn nàn về một loại không hỗ trợ. Các loại được hỗ trợ là gì?

+0

@Boaz: Vâng, đây là câu trả lời. Bạn có thể, xin vui lòng, đóng câu hỏi? –

Trả lời

13

Sau khi một số nghiên cứu Tôi thấy điều này trên http://msdn.microsoft.com/en-us/magazine/bb986125.aspx:

Loại

3C XPath -> Tương đương NET Class (Type)
String -> System.String
Boolean -> System.Boolean
Số -> System.Double
Result Tree Fragment -> System.Xml.XPath.XPathNavigator
Node Set -> System.Xml.XPath.XPathNodeIterator

Các vấn đề liên quan