2016-06-15 6 views
0

私はやるべきことがあります。私はxmlをhtmlファイルに変換する必要があります。私は、タグを確認し、XMLファイルからのタグに基づいてHTMLファイルを記述します。 私が見つけたように<BookHeader>私は<h1>をhtmlファイルに書きます。xmlファイルをhtmlに変換する

私はXML要素一つずつ読み出すC#

このコードを持っている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> 

この

レイアウトを有しています。これまでに以下のコードが行う印刷は、すべての要素とその内容

ですが、要素名は、プログラムは非常にその閉じタグまで

をタグの内容を読むことはありません<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は2つの最上位レベルのノード 'BookHeader'と' ChapterInfo'を持っているので、あなたのXMLはまったく有効ではありませんので、有効にするために "around"というものがあると仮定します。 「読んでいない」のではなく、そのセクションに対応するHTMLコードを「出力」したくないことを示す変数をコードに入れてください。 –

答えて

1

NB。私はC#を知らないので、私は単純な言葉で説明しようとすることができます。

単純に値をマップすることができます。 rdr.NameがBookHeaderの場合は、<h1>などを書き込みます。 EndElementrdr.Nameにアクセスする場合は、</h1>のように同じマップされた値を単に閉じることができます。それ以外の場合は、開いている要素を自分で追跡し、最も内側を閉じる必要があります。

xml構造の一部をスキップする問題については、私のコメントを参照してください。

この問題は一般にXSLTソリューションに適していると私は他のいくつかのコメンテーターに同意します。

関連する問題