2008-10-31 3 views

답변

1

XslCompiledTransform을 사용하여 xsl로 처리하지만 컴파일 속도가 느리고 실행이 빠르기 때문에 XslCompiledTransform을 캐시해야합니다.

그래서 :

  1. 그들을 정렬, 당신의 XML 일치하는 XSL을 작성하고 출력으로 정렬 된 목록을했다
  2. XslCompiledTransform 캐시에서 해당 XSL을 유지하고, 존재하지 않는 경우, 생성 받기 그것은 캐시
  3. 에 삽입은 새로운을 XmlDocument

이 빨리 피 묻은입니다으로 XSL을 통해 XML 변환, 깨끗한 코드를 유지하고 변화하는 일에 올 때 당신은 유연하고있어 전자 정렬 구현; 그것은 단지 하나의 xsl을 편집하는 것입니다.

나는 그래서 거기에 오타 될 수 있습니다 확인하지 않고이 입력하지만, 이것은 당신이 가야하는 방법입니다 :

XslCompiledTransform xsl = (XslCompiledTransform)HttpRuntime.Cache.Get("my_xsl"); 
if (xsl == null) 
{ 
    string fileName = "path/to/your/xslfile.xsl"; 
    xsl = new XslCompiledTransform(); 
    xsl.Load(fileName); 
    HttpRuntime.Cache.Insert("my_xsl", xsl, new CacheDependency(new string[]{fileName})); 
} 

과 같은 곳에 사용을하는 방법을 변환 :

public static XmlNode TransformToXml(IXPathNavigable xml, XslCompiledTransform xsl, XsltArgumentList arguments, XmlWriterSettings settings) 
{ 
    XmlDocument output = new XmlDocument(); 
    using (XmlWriter writer = XmlWriter.Create(output.CreateNavigator().AppendChild())) 
    { 
    xsl.Transform(xml, arguments, writer); 
    } 
    return output; 
} 
1

제 경험으로 보면 XSL을 사용하는 것이 더 좋은 방법 중 하나입니다. 그러나 큰 입력 파일로 작업 할 때 전반적인 속도는 약간 비쌉니다.

당신은 자신의 정렬을 굴릴 수는 있지만 솔직히 나는 그것이 더 빠를 것이라고 상상하지 못합니다.

내가 생각할 수있는 유일한 다른 가능한 옵션은 데이터보기, 또는 무언가를로드하고 거기에 정렬하고 XML로 돌아 오는 것입니다.하지만 그 방법은 잘못된 것 같습니다.

EDIT - 추가 정보를 바탕으로 목록에로드하는 것이 훨씬 빠를 것이라고 확신합니다. 확인하려면 두 번 시도해야하지만 필요한 경우 어쨌든 다른 형식으로, 당신도 마찬가지입니다.

1

먼저 비효율적 인 노드 선택 방법 (예 : 노드)을 사용하지 않는지 확인하는 것이 좋습니다.