2009-11-05 3 views
2

Indeed.com의 작업 목록 XML을 준수하도록 XML 파일을 만들려고합니다.C#/ASP.NET MVC에서이 XML 페이지를 어떻게 동적으로 생성 할 수 있습니까?

<?xml version="1.0" encoding="utf-8"?> 
<source> 
    <publisher>Super X Job Site</publisher> 
    <publisherurl>http://www.superxjobsite.com</publisherurl> 
    <job> 
     <title><![CDATA[Sales Executive]]></title> 
     <date><![CDATA[Fri, 10 Dec 2005 22:49:39 GMT]]></date> 
     <referencenumber><![CDATA[unique123131]]></referencenumber>  
     <url><![CDATA[http://www.superxjobsite.com/job/123]]></url> 
     <company><![CDATA[Big ABC Corporation]]></company> 
     <city><![CDATA[Phoenix]]></city> <state><![CDATA[AZ]]></state> 
     <country><![CDATA[US]]></country> <postalcode><![CDATA[85003]]></postalcode> 
     <description><![CDATA[Some really long job description goes here.]]></description> 
     </job> 
     [ more jobs ...] 

자, 지금 나는 위의 XML 요소의 각 하나와 일치 속성이 "작업"의 IEnumberable 있습니다

그것은 것 같습니다.

이 XML 문서를 생성하고 ASP.NET MVC에서 ActionResult로 반환하는 가장 좋은 방법은 무엇입니까? 나는 이것이 내가이 XML을 생성 할 수있는 일을해야 더 나은 방법이이 방법이 효과 것 알고 있지만

String xmlDoc = "<?xml version="1.0" encoding="utf-8"?>"; 
xmlDoc += "<source>"; 
xmlDoc += "<publisher>Super X Job Site</publisher>"; 
xmlDoc += "<publisherurl>http://www.superxjobsite.com</publisherurl>"; 


foreach(Job job in Jobs) 
{ 
    xmlDoc += "<job>"; 
    xmlDoc += "<description>" + job.Description + "</description>"; 
    ... 
} 

:

한 가지 방법은, 내가 좋아하는 수동으로 XML 문자열을 만들 수있다?

답변

5

LINQ to XML을 사용하여 동일한 작업을 수행 할 수도 있습니다.

using System.Xml.Linq; 
... 
... 
... 

XDocument xmlDoc = new XDocument(
         new XDeclaration("1.0", "utf-16", "true"), 
         new XElement("source", 
          new XElement("publisher","Super X Job Site"), 
          new XElement("publisherurl","http://www.superxjobsite.com") 
         ) 
        ); 
    foreach (Job job in jobs) 
    { 
     xmlDoc.Element("source").Add(
      new XElement("job", 
       new XElement("title", new XCData(job.Title)), 
       new XElement("date", new XCData(job.Date.ToShortDateString())), 
       new XElement("referencenumber", new XCData(job.ReferenceNumber)), 
       new XElement("url", new XCData(job.Url)), 
       new XElement("company", new XCData(job.Company)), 
       new XElement("city", new XCData(job.City)), 
       new XElement("country", new XCData(job.Country)), 
       new XElement("description", new XCData(job.Description)) 
      ) 
     ); 
    } 
2

System.Xml 네임 스페이스를 사용하여 빌드 할 수 있습니다. 당신이 문자열에서 조립하기로 결정하는 경우

http://www.csharphelp.com/archives/archive199.html

http://paulsiu.wordpress.com/2007/04/04/creating-a-xml-document-from-scratch-without-using-a-file-in-c/

가 대신 StringBuilder 객체를 사용 : 다음은 몇 가지 예입니다.

+0

강탈 유는 분명히 초 이내에, 우리는 같은 생각을했다 당신이 훨씬 더 좋은 예 :)을 XmlDocument와 비교 –

0
using System.Xml; 

... 

XmlDocument doc = new XmlDocument(); 
XmlNode docNode = doc.CreateXmlDeclaration("1.0", "utf-8", null); 
doc.AppendChild(docNode); 
XmlNode source = doc.CreateElement("source"); 

XmlNode publisher = doc.CreateElement("publisher"); 
publisher.InnerText = "Super X Job Site"; 
source.AppendChild(publisher); 

XmlNode publisherUrl = doc.CreateElement("publisherurl"); 
publisherUrl.InnerText = "http://www.superxjobsite.com"; 
source.AppendChild(publisherUrl); 

foreach(Job job in Jobs) 
{ 
    XmlNode jobNode = doc.CreateElement("job"); 
    ... 
    source.AppendChild(jobNode); 

} 

doc.AppendChild(source); 
+0

onfire입니다 실제로는 쉽게 많은 상황에서 (하지만 XPath 또는 다른 방법으로 쓰는 동안 노드를 트래버스해야하는 경우 XmlDocument를 사용하십시오). – Abel

3

스트림에만 기록하면됩니다. 나는 XmlWriter으로 성공했다. XmlDocument 방식과 거의 같은 방식이지만 CreateElements 및 AppendElements를 많이 사용하지 않고 일반적으로 상황을 더 쉽게 읽을 수 있습니다. 다음은 어떻게 할 수 있는지 보여주는 예입니다. 그러나 나는 WriteElementString이 당신을 대신 해줄 것이라고 생각하지 않기 때문에 cdata를하는 더 좋은 방법을 찾아야 할 것입니다.

XmlTextWriter w = new XmlTextWriter(Response.Output); 
    w.WriteStartElement("source"); 
    w.WriteElementString("publisher", "Super X Job Site"); 
    w.WriteElementString("publisherurl", "http://www.superxjobsite.com"); 
    foreach(Job job in Jobs) 
    { 
     w.WriteStartElement("job"); 
     w.WriteElementString("title", "Super X Job Site"); 
     ... 
     w.WriteEndElement(); 
    } 
    w.WriteEndElement(); 
    w.Close(); 
+0

일을했다하지만 내가, 내 게시물 삭제됩니다 – Abel

관련 문제