首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MarkUp HTML创建XML

从MarkUp HTML创建XML
EN

Stack Overflow用户
提问于 2014-11-04 19:11:35
回答 1查看 48关注 0票数 0

我在HTML标记表中有一些静态数据的网页。我的意思是,手动维护文本:

代码语言:javascript
复制
<table border="1" >
<tr><th>Number</th><th>Date</th><th>BW</th><th>WW</th><th>%</th><th>Type</th><th>CED</th><th>BW</th><th>WW</th><th>YW</th><th>Mlk</th><th>Me</th></tr>
<tr><td>313</td><td>9/16/2013</td><td>74</td><td>512</td><td>100</td><td>861U</td><td>3</td><td>-1.1</td><td>54</td><td>85</td><td>16</td><td></td></tr>
<tr><td>315</td><td>10/6/2013</td><td>-</td><td>-</td><td>-</td><td>W179</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr><td>316</td><td>10/102013</td><td>72</td><td>595</td><td>94.2</td><td>W179</td><td>7</td><td>-2.3</td><td>53</td><td>80</td><td>21</td><td>-3</td></tr>
<tr><td>350</td><td>10/11/2013</td><td>71</td><td>703</td><td>100</td><td>W179</td><td>7</td><td>-2.3</td><td>46</td><td>72</td><td>20</td><td>-5</td></tr>
<tr><td>392</td><td>3/8/2013</td><td>61</td><td>651</td><td>100</td><td>RANGER</td><td>7</td><td>-2.3</td><td>52</td><td>82</td><td>20</td><td>-2</td></tr>
<tr><td>303</td><td>7/3/2013</td><td>63</td><td>-</td><td>97.1</td><td>W179</td><td>8</td><td>-3.2</td><td>N/A</td><td>82</td><td>21</td><td>-8</td></tr>
<tr><td>304</td><td>7/8/2013</td><td>62</td><td>-</td><td>97.1</td><td>W179</td><td>7</td><td>-3.9</td><td>N/A</td><td>69</td><td>20</td><td>-4</td></tr>
<tr><td>397</td><td>3/18/2013</td><td>78</td><td>621</td><td>100</td><td>STATEMENT</td><td>6</td><td>-2.7</td><td>55</td><td>84</td><td>19</td><td>5</td></tr>
<tr><td>395</td><td>3/17/2013</td><td>63</td><td>716</td><td>94.2</td><td>STATEMENT</td><td>5</td><td>-2.7</td><td>54</td><td>85</td><td>19</td><td>5</td></tr>
<tr><td>390</td><td>3/6/2013</td><td>66</td><td>583</td><td>94.2</td><td>ENVY</td><td>2</td><td>-0.6</td><td>55</td><td>80</td><td>23</td><td>2</td></tr>
<tr><td>388</td><td>3/4/2013</td><td>53</td><td>621</td><td>100</td><td>STATEMENT</td><td>10</td><td>-5.1</td><td>49</td><td>82</td><td>20</td><td>2</td></tr>
<tr><td>300</td><td>3/22/2013</td><td>61</td><td>633</td><td>100</td><td>RANGER</td><td>8</td><td>-2.8</td><td>49</td><td>81</td><td>19</td><td>-2</td></tr>
<tr><td>379</td><td>2/1/2013</td><td>55</td><td>518</td><td>100</td><td>STATEMENT</td><td>8</td><td>-4.1</td><td>61</td><td>98</td><td>18</td><td>1</td></tr>
<tr><td>398</td><td>3/20/2013</td><td>62</td><td>664</td><td>100</td><td>RANGER</td><td>6</td><td>-2.3</td><td>53</td><td>83</td><td>20</td><td>0</td></tr>
<tr><td>384</td><td>2/10/2013</td><td>61</td><td>650</td><td>100</td><td>ENVY</td><td>3</td><td>-1</td><td>50</td><td>70</td><td>19</td><td>4</td></tr>
<tr><td>369</td><td>1/30/2013</td><td>76</td><td>651</td><td>100</td><td>STATEMENT</td><td>5</td><td>-2.4</td><td>60</td><td>99</td><td>20</td><td>8</td></tr>
<tr><td>373</td><td>1/21/2013</td><td>71</td><td>433</td><td>100</td><td>STATEMENT</td><td>4</td><td>-1.6</td><td>55</td><td>89</td><td>17</td><td>3</td></tr>
<tr><td>393</td><td>3/10/2013</td><td>63</td><td>717</td><td>100</td><td>STATEMENT</td><td>3</td><td>-4.6</td><td>51</td><td>91</td><td>20</td><td>5</td></tr>
<tr><td>389</td><td>3/8/2013</td><td>72</td><td>723</td><td>88.3</td><td>ENVY</td><td>4</td><td>-0.6</td><td>54</td><td>76</td><td>24</td><td>2</td></tr>
<tr><td>364</td><td>10/1/2012</td><td>60</td><td>574</td><td>100</td><td>RANGER</td><td>1</td><td>0.4</td><td>56</td><td>84</td><td>21</td><td>2</td></tr>
</table>

目前,我正在考虑使用WebClient.DownloadString来提取所有文本,并尝试通过解析每一行<tr>来创建一个XML文件。

这听起来很乏味,我宁愿不重新发明轮子。此外,一些好的解决方案将给我提供一些关于如何以最佳方式编写我的版本的想法。

有没有人遇到过能做到这一点的代码?

我开始,想让你知道我在做什么:

代码语言:javascript
复制
    private const string XML_DATA = "App_Data/page_data.xml";
    private const string TABLE_START = "<table>";
    private const string TABLE_STOP = "</table>";
    private string[] TABLE_ROW = { "<tr>", "</tr>" };
    private string[] TABLE_HEAD = { "<th>", "</th>" };
    private string[] TABLE_DET = { "<td>", "</td>" };

    private void load_data() {
        if (!File.Exists(XML_DATA)) {
            string HtmlText;
            using (var client = new WebClient()) {
                HtmlText = client.DownloadString(Server.MapPath("/Sales.aspx"));
            }
            if (!String.IsNullOrEmpty(HtmlText)) {
                var lcTxt = HtmlText.ToLower();
                int len0 = TABLE_START.Length;
                int tStart = lcTxt.IndexOf(TABLE_START) + len0;
                int tStop = lcTxt.IndexOf(TABLE_STOP);
                if ((len0 < tStart) && (tStart < tStop)) {
                    var tableString = HtmlText.Substring(tStart, tStop - tStart);
                    var tableRows = tableString.Split(TABLE_ROW, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var row in tableRows) {
                        if (-1 < row.IndexOf(TABLE_HEAD[0])) {
                          //
                        } else {
                          //
                        }
                    }
                }
            }
        }
    }

当然,您可以看到这已经失败了,因为使用<table border="1">的标记。

是的,很容易修复,但是我更希望有一个已经通过了很多调试步骤的工作指南。

更新:--我尝试使用XmlDocumentLoadXml方法,但它似乎无法读取基本的HTML:

EN

回答 1

Stack Overflow用户

发布于 2014-11-04 19:26:54

你绝对不应该尝试手动解析它。其他人已经解决了这个问题。

如果您的标记是有效的XML (从您向我们展示的内容来看,它看起来是有效的),那么您只需将其解析为XML:

代码语言:javascript
复制
XmlDocument doc = new XmlDocument();
doc.LoadXml(HtmlString);
doc.Save("myfile.xml");

但就这一点而言,如果它已经是有效的XML标记,而您所需要做的就是将其保存为一个文件,则不需要解析它。省省吧:

代码语言:javascript
复制
File.WriteAllText("myfile.xml", HtmlString);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26743099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档