2010-06-08 5 views
1

XElementXslCompiledTransform의 조합을 사용하는 데 문제가 있습니다. 나는 아래에 사용하고있는 샘플 코드를 넣었다. GetXmlDocumentXml() 메서드를 사용하여 입력 XML을 얻는다면 제대로 작동합니다. 상태 시작에서XElement 및 XslCompiledTransform 문제

토큰 텍스트가 잘못된 XML 문서 초래 : 내가 대신 GetXElementXml() 방법을 사용하는 경우 XslComiledTransformTransform 메서드를 호출 할 때, 나는 InvalidOperationException를 얻을. XML 조각을 작성하려면 ConformanceLevel 설정이 ConformanceLevel.Fragment 또는 ConformanceLevel.Auto로 설정되어 있는지 확인하십시오.

XElementXmlDocumentCreateNavigator 메서드는 XPathNavigator을 반환합니다. 여분의 물건은 XmlDocument입니다. 따라서이 모든 작업을 수행 할 수 있으며, XElement으로 어떻게 처리 할 수 ​​있습니까? 나는 단지 미친 짓하고 있니?

static void Main(string[] args) 
{ 
    XslCompiledTransform stylesheet = GetStylesheet(); // not shown for brevity 
    IXPathNavigable input = this.GetXElementXml(); 
    using (MemoryStream ms = this.TransformXml(input, stylesheet)) 
    { 
     XmlReader xr = XmlReader.Create(ms); 
     xr.MoveToContent(); 
    } 
} 

private MemoryStream TransformXml(
    IXPathNavigable xml, 
    XslCompiledTransform stylesheet) 
{ 
    MemoryStream transformed = new MemoryStream(); 
    XmlWriter writer = XmlWriter.Create(transformed); 
    stylesheet.Transform(xml, null, writer); 

    transformed.Position = 0; 
    return transformed; 
} 

private IXPathNavigable GetXElementXml() 
{ 
    var xml = new XElement("x", new XElement("y", "sds")); 
    return xml.CreateNavigator(); 
} 

private IXPathNavigable GetXmlDocumentXml() 
{ 
    var xml = new XmlDocument(); 
    xml.LoadXml("<x><y>sds</y></x>"); 
    return xml.CreateNavigator(); 
} 

답변

3

오, 쉬웠습니다. 해결책은 XDocument 개체에 XElement을 래핑하는 것이 었습니다. 문제 해결됨!