2016-06-15 134 views
0

我有一個任務要做。我需要將xml轉換爲html文件。我檢查標籤,然後用基於xml文件的標籤編寫html文件。 就像我發現<BookHeader>我在html文件中寫入<h1>將xml文件轉換爲html

我有此

XML

<BookHeader> 
    <AuthorGroup> 
     <Author > 
     <AuthorName > 
      <GivenName>Juanita</GivenName> 
      <FamilyName>Gomez</FamilyName> 
     </AuthorName> 
     <Contact> 
      <Email>[email protected]</Email> 
     </Contact> 
     </Author> 

    </AuthorGroup> 
    </BookHeader> 

    <ChapterInfo > 
     <ChapterID>1</ChapterID> 
     <ChapterNumber>Chapter 1</ChapterNumber> 

     <ChapterTitle Language="En">Just some Title</ChapterTitle> 


     <ChapterHistory> 
     <RegistrationDate> 
      <Year>2020</Year> 
      <Month>8</Month> 
      <Day>18</Day> 
     </RegistrationDate> 
     </ChapterHistory> 

    </ChapterInfo> 

的佈局我有這樣的代碼在c#

我讀取xml元件一個接一個。到目前爲止,下面的代碼所做的是打印的所有元素,其含量

,但我想要做的是,如果的元素名稱爲<ChapterHistory>程序將無法讀取標籤的內容,以結束標記

所以程序不會讀取標籤

<RegistrationDate> 
       <Year>2020</Year> 
       <Month>8</Month> 
       <Day>18</Day> 
      </RegistrationDate> 

我該怎麼做?非常感謝。我很難做到這一點

XmlReader rdr = XmlReader.Create(new System.IO.StringReader(myString)); 

      while (rdr.Read()) 
      { 

       switch (rdr.NodeType) 
       { 
        case XmlNodeType.Element: 
         Console.WriteLine("<" + rdr.Name + ">"); 

         break; 
        case XmlNodeType.Text: 
         Console.WriteLine(rdr.Value); 

         break; 
        case XmlNodeType.EndElement: 
         Console.WriteLine("..."); 
         break; 
       } 
       count++; 

      } 
+2

我會使用'xslt'而不是手動解析文件。或者當你真的需要邏輯時,不要解析xml,而是反序列化它,或者用'xpath'查詢它。 – Aphelion

+0

但我沒有xslt文件先生。用戶要讀取文件並輸出爲html文件。輸入是xml – knowme

+2

你是什麼意思「程序不應該讀標籤的內容直到它的結束標記」?如果你想繼續閱讀任何背後的東西,我認爲這是不可能的。 OTOH,你的xml根本無效,因爲它有兩個頂層節點'BookHeader'和'ChapterInfo',所以我們假設有一些「圍繞它」來使它有效。而不是「不讀」它,你應該在你的代碼中放置一個變量,表示你不想爲該部分「輸出」相應的HTML代碼。 –

回答

1

NB。我不知道C#,所以我只能嘗試用簡單的語言解釋。

您可以簡單地映射值,例如,如果rdr.Name是BookHeader則寫<h1> etc.pp.如果您有權訪問EndElement案例中的rdr.Name,則可以簡單地關閉相同的映射值,如</h1>。否則,你必須自己跟蹤開放元素並關閉最內層。

關於跳過一些xml結構的問題,請參閱我對該問題的評論。

請注意,我同意其他一些評論者的看法,認爲這個問題通常更適合XSLT解決方案。