2013-08-21 2 views
1

.NET xslt 확장 개체를 구현하려고합니다. 예를 들어 herethere의 예제를 사용하여 xml 파일이 있는지 확인합니다. 나는 또한별로 도움이되지 않은 관련 게시물을 생각해 보았다..NET xslt 확장 개체가 없습니다.

나는 다음과 같은 코드로 확장을 찾으려고, 그것은 "확장 기능을 사용할 수 없습니다"표시

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:XsltExtensionObject="urn:XsltExtensionObject" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
exclude-result-prefixes="msxsl XsltExtensionObject"> 

...

<xsl:choose> 
    <xsl:when test="function-available('XsltExtensionObject:getFile')"> 
      Extension function is available 
    </xsl:when> 
    <xsl:otherwise> 
      Extension function is not available 
    </xsl:otherwise> 
</xsl:choose> 

...

다음과 같이 동일한 VS 2012 솔루션 내에서 XsltExtensionObject라는 별도의 클래스 라이브러리를 만들었습니다 (첫 번째 예제와 일관되게 VB에서 수행하지 않았습니다) :

Public Class FileExist 
    Private exist As Boolean 
    Public Sub New() 
     exist = False 
    End Sub 
    Public Function getFile(ByVal myFile As String) As Boolean 
     exist = System.IO.File.Exists(myFile) 
     Return exist 
    End Function 
End Class 

6,나는 다음과 같이 XSL 변환을 실행합니다

protected void Page_Load(object sender, EventArgs e) 
    { 
     XmlDocument xmldoc = new XmlDocument(); 
     XslCompiledTransform xslt = new XslCompiledTransform(); 
     xslt.Load(MapPath("homepage.xslt")); 
     XsltArgumentList xslArgs = new XsltArgumentList(); 
     XsltExtensionObject.FileExist obj = new XsltExtensionObject.FileExist(); 
     xslArgs.AddExtensionObject("urn:XsltExtensionObject", obj); 
     xmldoc.Load(MapPath("lists.xml")); 
     StringWriter sw = new StringWriter(); 
     xslt.Transform(new XmlNodeReader(xmldoc), null, sw); 
     content.InnerHtml = sw.ToString(); 
    } 

는 왜 확장을 찾을 수 있습니까? 내가 여기서 무엇을 놓치고 있니? 어셈블리 참조?

답변

0

Xslt Object Extension이 당황한 다른 사람들에게 제시하고자하는 두 가지 점이 있습니다. 먼저, this example에 표시된대로 XmlDocument가 아닌 XPathDocument를 사용하여 xml 문서를 연 경우 확장 기능이 발견되었습니다.

두 번째로, 위의 FileExist를 포함하는 클래스는 클래스 라이브러리로 만들 필요가 없습니다. 다음은 작동 한 C# 코드입니다.

protected void Page_Load(object sender, EventArgs e) 
    { 
     XPathDocument xmldoc = new XPathDocument(MapPath("lists.xml")); 
     XslCompiledTransform xslt = new XslCompiledTransform(); 
     xslt.Load(MapPath("homepage.xslt")); 
     XsltArgumentList xslArgs = new XsltArgumentList(); 
     FileExist obj = new FileExist(); 
     xslArgs.AddExtensionObject("urn:XsltExtensionObject", obj); 
     XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.OmitXmlDeclaration = true; 
     settings.ConformanceLevel = ConformanceLevel.Fragment; 
     settings.CloseOutput = false; 
     using (var sw = new StringWriter()) 
     { 
      using (var xw = XmlWriter.Create(sw, settings)) 
      { 
       xslt.Transform(xmldoc, xslArgs, xw, null); 
      } 
      content.InnerHtml = sw.ToString(); 
     }    
    } 
    public class FileExist 
    { 
     bool exist = false; 
     public bool getFile(string myFile) 
     { 
      exist = File.Exists(HttpContext.Current.Server.MapPath(myFile)); 
      return exist; 
     } 
    } 
관련 문제