2016-07-29 75 views
0

這是我的XML的一個樣本:如何恢復XML標籤中的所有XML元素?

 <Library> 
      <Stack> 
       <Book> 
        <Author>....</Author> 
        <Date>....</Date> 
       </Book> 
       <Book> 
        <Author>....</Author> 
        <Date>....</Date> 
       </Book> 
      </Stack> 
      <Stack> 
       <SectionScience> 
        <Book> 
         <Author>....</Author> 
         <Date>....</Date> 
        </Book> 
       </SectionScience> 
       <SectionHorror> 
        <Book> 
         <Author>....</Author> 
         <Date>....</Date> 
        </Book> 
       </SectionHorror> 
       <Book> 
        <Author>....</Author> 
        <Date>....</Date> 
       </Book> 
      </Stack> 
     </Library> 

我已經嘗試實現一個恢復所有這些信息的方法,但它不工作:它恢復在Stack只有一個項目,我想它恢復堆棧中的所有元素。

我所得到的是這樣的:

堆棧1:第一本書;

堆棧2:第一部分

這是我的代碼:

private void ConstructionInterface() 
{ 
    XElement docX = XElement.Load(Application.StartupPath + @"\Library.xml"); 
    foreach (XElement elemColone in docX.Descendants("Stack")) 
    { 
     if (elemColone.Element("SectionHorror") != null) 
     CreateSectionHorror(elemColone.Element("SectionHorror")); 
     else if (elemColone.Element("SectionScience") != null) 
     CreateSectionScience(elemColone.Element("SectionScience")); 
     else if (elemColone.Elements("Book") != null) 
     CreateBook(elemColone.Element("Book")); 
     } 
    } 
+0

找到使用xpath查詢xml的很好教程。 – Muckeypuck

+1

我注意到的第一件事是,這是無效的XML(標籤中不能有空格)。我注意到的第二件事是,你寫的代碼只能對每個Stack標籤執行一個動作。 – AakashM

+0

是的,我明白,但我不知道如何實現一個algaorythm誰不執行堆棧標記一個動作 –

回答

2

您需要通過每個Stack的迭代的孩子們:

foreach (XElement elemColone in docX.Descendants("Stack")) 
{ 
    foreach (var sectionOrBook in elemColone.Elements()) 
    { 
     if (sectionOrBook.Name == "SectionHorror") 
      CreateSectionHorror(sectionOrBook); 
     else if (sectionOrBook.Name == "SectionScience") 
      CreateSectionScience(sectionOrBook); 
     else if (sectionOrBook.Name == "Book") 
      CreateBook(sectionOrBook); 
    } 
} 
0

目前還不清楚什麼「恢復」意味着,但如果它意味着創建現有的XML的副本,然後在VB中使用XElement將是

Dim xe As XElement 
    'to load from a file 
    ' xe = XElement.Load("Your Path Here") 

    ' for testing 
    xe = 
     <Library> 
      <Stack> 
       <Book> 
        <Author>....</Author> 
        <Date>....</Date> 
       </Book> 
       <Book> 
        <Author>....</Author> 
        <Date>....</Date> 
       </Book> 
      </Stack> 
      <Stack> 
       <SectionScience> 
        <Book> 
         <Author>....</Author> 
         <Date>....</Date> 
        </Book> 
       </SectionScience> 
       <SectionHorror> 
        <Book> 
         <Author>....</Author> 
         <Date>....</Date> 
        </Book> 
       </SectionHorror> 
       <Book> 
        <Author>....</Author> 
        <Date>....</Date> 
       </Book> 
      </Stack> 
     </Library> 

    Dim recover As XElement = New XElement(xe) ' this line creates a copy 

    ' recover.Save("path here") 
相關問題