2012-01-18 2 views
0

동적 집합으로부터 XML을 생성 다음 :난 I는 다음의 간단한 코드 블록을 사용하여 XML로 전송할 수있는 데이터 세트를 C 번호에 ASP.net 애플리케이션이

<NewDataSet> 
<ImageInfo> 
<ImageID>1</ImageID> 
<ImageName>untitled.bmp</ImageName> 
<ImagePath>Some Path</ImagePath> 
<Width>800</Width> 
<Height>190</Height> 
<TileSize>256</TileSize> 
<Overlap>1</Overlap> 
<MimeType>image/jpeg</MimeType> 
<Scale /> 
</ImageInfo> 
</NewDataSet> 

이것은 분명히 한 행의 예이며 데이터 집합에는 여러 행이 있습니다. 이제는 XML 블록을 동적으로 포맷하는 방법을 모릅니다. 누구든지 이것에 대한 좋은 자습서를 가르쳐 주시겠습니까? 나는 XML은 같은 포맷 할

<data> 
<Columns> 
<Column Name= "ImageID"/> 
<Column Name= "ImageName"/> 
<Column Name= "ImagePath"/> 
<Column Name= "Width"/> 
<Column Name= "Height"/> 
<Column Name= "TileSize"/> 
<Column Name= "Overlap"/> 
<Column Name= "MimeType"/> 
<Column Name= "Scale"/> 
</Columns> 
<Rows> 
<Row> 
<Cell>1</Cell> 
<Cell>untitled.bmp</Cell> 
<Cell>Some Path</Cell> 
<Cell>800</Cell> 
<Cell>190</Cell> 
<Cell>256</Cell> 
<Cell>1</Cell> 
<Cell>image/jpeg</Cell> 
<Cell></Cell> 
</Row> 
<Row> 
. 
. 
. 
</Row> 
</Rows> 
</data> 

사람이 어떻게이 작업을 수행하는 나를 인도 할 수 다음?

내 응용 프로그램에서는 데이터 집합의 구조를 미리 알지 못합니다. 즉 예에서 설명한 것보다 많은 열이있는 결과 데이터 집합이있을 수 있습니다. 이 문제를 어떻게 해결해야합니까? 어떤 도움이라도 대단히 감사 할 것입니다.

답변

0

DataTable을 사용한 다음 해당 DataTable을 XML 스트림이나 파일로 변환 해보십시오.

DataTable myDataTable = myDataSet.Tables[0]; 


myDataTable.WriteXml(..); 

당신은 TextWriter, Stream과 같은 오버로드를 찾을 수 있습니다. 마지막으로 DataTable 이외의 노드를 추가하려면 xml을 수정해야합니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 그것은 제가 구하는 것이 아닙니다. 데이터 집합에서 첫 번째 xml 블록을 가져올 수 있다고 언급했습니다. 내가 말했듯이, 질문에서 두 xml 블록처럼 보일 수 있도록 노드를 추가하기 위해 XML을 수정하는 방법을 알고 싶습니다. 다시 한 번 감사드립니다. – nilarya

0

해결 방법이 될 수 있습니다. 코드 표준은 더 좋을 수 있지만 다음과 같이 사용할 수 있습니다.

XmlDocument doc = new XmlDocument(); 
     XmlDocument Outputdoc = new XmlDocument(); 
     doc.LoadXml("<NewDataSet> <ImageInfo> <ImageID>1</ImageID> <ImageName>untitled.bmp</ImageName> <ImagePath>Some Path</ImagePath> <Width>800</Width> <Height>190</Height> <TileSize>256</TileSize> <Overlap>1</Overlap> <MimeType>image/jpeg</MimeType> <Scale /> <ImageID>1</ImageID> <ImageName>untitled.bmp</ImageName> <ImagePath>Some Path</ImagePath> <Width>800</Width> <Height>190</Height> <TileSize>256</TileSize> <Overlap>1</Overlap> <MimeType>image/jpeg</MimeType> <Scale /></ImageInfo> </NewDataSet> "); 
     XmlNode node = doc.SelectSingleNode("/NewDataSet/ImageInfo"); 
     XmlNodeList nodes = node.ChildNodes; 
     XmlDocument newdoc = null; 
     StringBuilder sb = new StringBuilder("<data><Columns>"); 
     string lastNode=string.Empty; 
     string firstNode = string.Empty; 
     foreach (XmlNode n in node.ChildNodes) 
     { 
      if(n.Name.Equals(firstNode)) 
       break; 
      if (string.IsNullOrEmpty(firstNode)) 
       firstNode = n.Name; 

      newdoc = new XmlDocument(); 
      XmlNode newNode = newdoc.CreateElement("Column"); 
      XmlAttribute newAttribute = newdoc.CreateAttribute("Name"); 
      newAttribute.Value = n.Name; 
      newNode.Attributes.Append(newAttribute); 
      newdoc.AppendChild(newNode); 
      sb.Append(newdoc.InnerXml); 
      lastNode=n.Name; 
     } 
     sb.Append("</Columns><Rows><Row>"); 
     foreach (XmlNode xnode in node.ChildNodes) 
     { 
      XmlDocument newdoc1 = new XmlDocument(); 
      XmlNode newNode = newdoc1.CreateElement("Cell"); 
      newNode.InnerText = xnode.InnerText; 
      newdoc1.AppendChild(newNode); 
      sb.Append(newdoc1.InnerXml); 
      if (xnode.Name.Equals(lastNode)) 
       sb.Append("</Row>"); 
     } 
     sb.Append("</Rows></data>"); 

이것은 매우 신속하게 작업을 수행하는 방법입니다. 코드를 표준화 할 수 있습니다. 이제 당신이 필요로하는 출력을보십시오 :

<data> 
<Columns> 
    <Column Name="ImageID" /> 
    <Column Name="ImageName" /> 
    <Column Name="ImagePath" /> 
    <Column Name="Width" /> 
    <Column Name="Height" /> 
    <Column Name="TileSize" /> 
    <Column Name="Overlap" /> 
    <Column Name="MimeType" /> 
    <Column Name="Scale" /> 
</Columns> 
<Rows> 
    <Row> 
     <Cell>1</Cell> 
     <Cell>untitled.bmp</Cell> 
     <Cell>SomePath</Cell> 
     <Cell>800</Cell> 
     <Cell>190</Cell> 
     <Cell>256</Cell> 
     <Cell>1</Cell> 
     <Cell>image/jpeg</Cell> 
     <Cell></Cell> 
    </Row> 
     <Cell>1</Cell> 
     <Cell>untitled.bmp</Cell> 
     <Cell>Some Path</Cell> 
     <Cell>800</Cell> 
     <Cell>190</Cell> 
     <Cell>256</Cell> 
     <Cell>1</Cell> 
     <Cell>image/jpeg</Cell> 
     <Cell></Cell> 
    </Row> 
</Rows> 
</data> 

참고 : 두 개의 데이터 행을 만들기 위해 동일한 데이터 콜렉션을 사용했습니다.

+0

예를 들어 주셔서 감사합니다. 저는 XML을 동적으로 구성하는 방법을 이해했습니다. – nilarya

관련 문제