2010-05-07 5 views
2

안녕하세요 XML 파일을 복사하고 특정 요소 locaiton에 몇 가지 요소를 추가하고 싶습니다. 가장 쉽고 쉬운 방법은 무엇입니까? xmlReader를 사용하여 요소를 읽고 각 유형을 참조하는 하나씩 작성하십시오.이 문제에 대해 약간의 문제가 있었지만,이 외에도 나에게도 어떻게 든 더 잘할 수있는 작업을하는 것 같습니다. 아래 예제에서 기본 정의로 xml을 사용하여 sheet1에 새 값을 삽입하여 동일한 형식의 새 XML을 작성해야하지만 기존 행 다음에 sheet2에 대해 동일한 작업을 수행해야합니다. 내보기에특정 위치에 새 요소를 삽입하여 xml 파일 복사 - C#

<book> 
    <Sheet ss:name="Sheet1"> 
     <Table > 
     <Row > 
     <Cell/> 
     <Cell> 
      Title Name  
     </Cell> 
     <Cell > 
      Title Description 
     </Cell> 
     </Row> 
    </Sheet> 
<a/> 
<b/> 
    <Sheet ss:name="Sheet2"> 
     <Table > 
     <Row > 
     <Cell/> 
     <Cell> 
      Title Name  
     </Cell> 
     <Cell > 
      Title Description 
     </Cell> 
     </Row> 
    </Sheet> 
</book> 

답변

7

간단한 방법은 다음, 수정, XML에 LINQ를 사용하여 전체 문서를로드 다시를 저장하는 것입니다. 그게 내 경험에 약간 털이 얻을 수있는 XmlReader을 사용하는 것보다 쉽습니다.

그러나 문서를 거대한 크기로 만들면 문제가 될 수 있습니다. 그게 문제가 될 가능성이 있습니까?

편집 : 여기 (안된) XML에 LINQ에서 짧은 예입니다

XDocument doc = XDocument.Load("test.xml"); 
XNamespace ss = "http://url/for/ss"; 
Sheet sheet1 = doc.Descendants("Sheet") 
        .Where(x => (string) x.Attribute(ss + "name") == "Sheet1"); 
XElement lastRow = sheet1.Elements("Row").LastOrDefault(); 
// Note: if there aren't any rows, lastRow will be null here. Handle accordingly 
lastRow.AddAfterSelf(new XElement("Foo", "Extra value")); 

마지막 부분에 대한 대안, 당신은 단지 시트의 모든 이전 후에서 새로운 콘텐츠를 원하는 경우 :

sheet1.Add(new XElement("Foo", "Extra value")); 
+0

원본 xmlFormat 파일은 그리 크지 않지만 최종 결과에는 몇 MB가 포함될 수 있습니다. linq를 사용하여 이것을 수행하는 방법에 대한 링크/예제가 있습니다. 발견 된 요소 (예제에서 shhet)까지 모든 데이터를 가져와야합니다. 새 XML에 복사하고, 새 데이터를 삽입하고, 원하는 데이터 뒤에 모든 데이터를 복사해야합니다. 당신의 도움을 주셔서 감사합니다!!! 게다가 xmlReader 또는 linq와 xml과의 장점/단점 비교 (이 경우 – user271077

+0

) 전체 내용을 메모리로 읽어들이려면 복사 할 필요가 없습니다. 트리를 적절하게 수정 한 다음 저장하십시오. 나중에. XmlReader를 통한 XML에 대한 LINQ의 이점은 코드가 훨씬 간단하다는 것입니다. 단점은 모든 데이터가 메모리에 저장된다는 것입니다. 몇 MB는 전혀 문제가되지 않습니다. 당신이 할 수있는 일에 대한 약간의 예를 쓸 것입니다. –

+0

고마워, 고마워. 어떤 파일 크기에서 걱정해야합니까? – user271077

관련 문제