2009-06-24 2 views
0

아래 루프와 C#의 XML 작성자를 사용하여 작성중인 xml 문서가 있습니다. 현재 잘 작동하지만 XML을 작성할 때마다 자동으로 driveStart 필드를 사용하여 오름차순으로 정렬하는 솔루션을 구현하려고합니다. 사람들이 XSLT에서이 작업을 수행해야한다고 말하지만 잘 따르는 좋은 예를 찾는 데 어려움을 겪고 있습니다. 누구든지 내가 사용할 수있는 경험이 있습니까? 어떤 도움이라도 대단히 감사합니다.XML을 C#으로 작성하기 전에 쓰기

XmlDocument doc = new XmlDocument(); 
XmlElement rn = doc.CreateElement("DriveLayout"); 
XmlElement dn = null; 
XmlAttribute xa, xa1, xa2, xa3, xa4, xa5, xa6; 
doc.AppendChild(rn); 

foreach (GridItem item in this.fileSystemGrid.Items) 
{ 
    dn = doc.CreateElement("Drive"); 
    xa = doc.CreateAttribute("driveTime"); 
    xa.Value = item["DriveTime"].ToString(); 
    xa1 = doc.CreateAttribute("driveStart"); 
    xa1.Value = item["DriveStart"].ToString(); 
    xa2 = doc.CreateAttribute("driveEnd"); 
    xa2.Value = item["DriveEnd"].ToString(); 
} 

dn.SetAttributeNode(xa); 
dn.SetAttributeNode(xa1); 
dn.SetAttributeNode(xa2); 
rn.AppendChild(dn); 

return doc.InnerXml; 

답변

3

xml 작성기를 사용하기 전에 DriveStart로 컬렉션을 정렬하십시오.

+0

죄송합니다. C#을 처음 사용했습니다. 그래서 item.Sort = 라인의 라인을 따라 뭔가? – Splashlin

+0

이 문제에 관해서는 팀의 고위 개발자에게 이야기해야 할 것입니다. 무엇보다 그리드가 바인딩 된 것에서 데이터를 가져 오는 대신 그리드 자체에서 데이터를 가져 오는 것이 약간 이상합니다. 다음 질문은 사용중인 Visual Studio의 버전입니다. –

+0

그리드 컬렉션을 정렬하는 방법을 찾지 못하는 것 같습니다. 나는 gridview와 다른 것을 할 수 있지만 전체 gridcollection을 수행하는 방법을 안다. – Splashlin

0

왜 분류하고 싶습니까? 그것은 어떻게 사용될 것입니까? 일반적으로 XML은 단지 데이터이며,보기 좋게 정렬되지 않습니다.

+0

xml은 나중에 다른 프로그램에서 사용하기 위해 구문 분석됩니다. 문제는이 특정 프로그램을 실행할 때 가장 작은 것에서 가장 큰 것까지 순서대로 가야한다는 것입니다. 따라서 필자는 XML이 작성되기 전에 바로 정렬하여 다른 프로그램이 올바르게 작업 할 수 있도록하려고합니다. – Splashlin

+0

다음은 실제로 다른 프로그램의 작업입니다. 그렇지 않으면 요구 사항이 변경되면 (DriveStart뿐만 아니라 DriveEnd도 정렬 할 수 있습니다) 코드가 변경되어야합니다. 코드에서 다른 프로그램이 데이터를 정렬하는 방법을 실제로 알 수는 없습니다. –

1

이유가 궁금하다면 을 처음부터 정렬 된 방식으로 빌드하십시오. 이것은 특히 XSL을 처음 접하는 사용자들보다 쉽고 효율적입니다.

어쨌든, —의 재미가 XML을 가정에 대한 것은 다음과 같습니다

<DriveLayout> 
    <Drive driveTime="somevalue" driveStart="somevalue" driveEnd="somevalue" /> 
    <Drive driveTime="somevalue" driveStart="somevalue" driveEnd="somevalue" /> 
    <Drive driveTime="somevalue" driveStart="somevalue" driveEnd="somevalue" /> 
</DriveLayout> 

그런 다음이 XSLT 1.0 스타일 시트 걸릴 정렬 :

는 .NET에서
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="DriveLayout"> 
    <xsl:copy> 
     <xsl:apply-templates select="Drive"> 
     <xsl:sort select="@driveTime" /> 
     </xsl:apply-templates> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Drive"> 
    <xsl:copy> 
     <xsl:copy-of select="@*"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

당신이 XslCompiledTransform을 사용을 클래스를 사용하여 문서를 변경하십시오. 연결된 MSDN 페이지에는 시작할 수있는 충분한 자료가 있습니다.

관련 문제