2014-03-05 2 views
1

저는 C#의 Visual Studio 2012에서 작업하고 있습니다. 주어진 xslt (Template.xslt) 파일에서 총 템플릿 수의 이름을 가져 오려고합니다. 아래 코드는 첫 번째 템플릿 만 제공합니다.C# 코드를 사용하여 XSLT의 템플릿 이름을 읽습니다.

List<string> listTemplates = new List<string>(); 
XmlDocument xslDoc = new XmlDocument(); 

xslDoc.Load("Template.xslt"); 

XmlNamespaceManager nsMgr = new XmlNamespaceManager(xslDoc.NameTable); 
nsMgr.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform"); 

XmlAttribute valueOf = (XmlAttribute)xslDoc.SelectSingleNode("/xsl:stylesheet/xsl:template/@name", nsMgr); 

XSLT 파일에서 모든 템플릿 이름을 얻는 방법을 알려주십시오.

답변

1

System.Linq.XElement를 사용하는 아래 메서드를 사용할 수 있습니다.

public static IEnumerable<string> GetTemplateNames(string xsltPath) 
     { 
      var xsl = XElement.Load(xsltPath); 
      return xsl.Elements("{http://www.w3.org/1999/XSL/Transform}template") 
       .Where(temp => temp.Attribute("name") != null) 
       .Select(temp => temp.Attribute("name").Value); 
     } 

또는 코드를 약간 수정하여 동일하게 만들 수 있습니다.

List<string> listTemplates = new List<string>(); 
      XmlDocument xslDoc = new XmlDocument(); 

      xslDoc.Load("Template.xslt"); 

      XmlNamespaceManager nsMgr = new XmlNamespaceManager(xslDoc.NameTable); 
      nsMgr.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform"); 

      var nameAttributes = xslDoc 
         .SelectNodes("/xsl:stylesheet/xsl:template/@name", nsMgr) 
         .Cast<XmlAttribute>(); 
      var names=nameAttributes.Select(n => n.Value); 
+0

좋은 전화 빅터! – user3219897

0

템플릿 이름을 얻은 후에 해당 매개 변수 이름을 읽고 싶습니다. 나는 아래의 코드를 작성 특정 템플릿 은 (TEMPLATENAME는 XSLT 파일에서 템플릿의 이름입니다) : ". 표현 노드 집합으로 평가해야한다"그것은 오류를 보여줍니다

XmlNodeList templateParam = (XmlNodeList)xslDoc.SelectNodes("/xsl:stylesheet/xsl:template/[@name = '" + templateName + "']/xsl:param/@name", nsMgr); 

여기에 무엇이 누락되어 있습니까?

관련 문제