0

私は最近、数日前に C# を開始し (Java から移行)、練習用にいくつかのコードを書いています。この現在のプログラムは、xml ファイルを読み取り、コンテンツを html テーブルに出力します。Visual Studio IDE を使用しています。エラーが表示されます:「テーブル」の開始タグが「本文」の終了タグと一致しません。これが私のコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
using System.Xml.Linq;


namespace XML
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter the file name: ");
            String fileName = Console.ReadLine();
            Console.WriteLine("Enter output file");
            String outFile = Console.ReadLine();
            XDocument xml =  XDocument.Load(Path.GetFullPath(outFile)); 
            StreamWriter outf = new StreamWriter(Path.GetFullPath(outFile));
            outputHTML(xml,outf);
            outf.Close();
        }

        static void outputHTML(XDocument xml, StreamWriter outf)
        {
            outf.WriteLine("<!DOCTYPE html>");
            outf.WriteLine("<html>");
            outf.WriteLine("<body>");
            outf.WriteLine("<table border='1'>");
            while (xml.Root.HasElements)
            {
                outf.WriteLine("<tr>");
                var products = from  p in xml.Descendants("book")
                               select new
                               {
                                   author = (String)p.Element("author"),
                                   genre = (String)(String)p.Element("genre"),
                                   title = (string)p.Element("title"),
                                   price = (int)p.Element("price"),
                                   publishDate = (String)p.Element("publish_date"),
                                   Descrip = (String)p.Element(" ")
                               };
                foreach (var product in products)
                {
                    outf.WriteLine("<td>");
                    outf.WriteLine(product.author);
                    outf.WriteLine("</td>");

                    outf.WriteLine("<td>");
                    outf.WriteLine(product.title);
                    outf.WriteLine("</td>");

                    outf.WriteLine("<td>");
                    outf.WriteLine(product.genre);
                    outf.WriteLine("</td>");

                    outf.WriteLine("<td>");
                    outf.WriteLine(product.price);
                    outf.WriteLine("</td>");

                    outf.WriteLine("<td>");
                    outf.WriteLine(product.publishDate);
                    outf.WriteLine("</td>");

                    outf.WriteLine("<td>");
                    outf.WriteLine(product.Descrip);
                    outf.WriteLine("</td>");


                }
                outf.WriteLine("</tr>");
            }
            outf.WriteLine("</table>");
            outf.WriteLine("</body>");
            outf.WriteLine("</html>");
        }
    }
}

***また、誰かが C# を練習するために書くべきプログラムを推奨できれば、それは素晴らしいことです。

ありがとう

4

1 に答える 1

2

念のため、独自の Html (または xml) を記述しないでください。エンコーディングからタグの不一致まで、あらゆる種類の問題に遭遇することになります。を使用しHTML Agility Packて、すべての書式設定を行います。

public string CreateHTML(XElement sourceXML)
{
    //make the Html Agility Pack object
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

    //parse through your xml
    var products = sourceXML.Descendants("book")
        .Select(x => new
        {
            author = x.Element("author").Value,
            genre = x.Element("genre").Value,
            title = x.Element("title").Value,
            price = x.Element("price").Value,
            publishDate = x.Element("publish_date").Value,
            descrip = x.Element("description"),
        });

    //make and populate your table node
    HtmlNode tableNode = HtmlNode.CreateNode("<table border='1'>");

    foreach (var product in products)
    {
        tableNode.AppendChild(HtmlNode.CreateNode("<td>" + product.author + "</td>"));
        tableNode.AppendChild(HtmlNode.CreateNode("<td>" + product.genre + "</td>"));
        ....
    }

    //create the html root and append the table node
    doc.DocumentNode.AppendChild(HtmlNode.CreateNode("<html><body>"));
    doc.DocumentNode.Element("html").Element("body").AppendChild(tableNode);

    return doc.DocumentNode.InnerHtml;
}

次に、次のように呼び出すことができます。

XElement sourceXML = XElement.Load(Path.GetFullPath(outFile));
string html = CreateHTML(sourceXML);
于 2013-06-08T03:50:08.827 に答える