从CSS代码解析字符串

时间:2013-11-20 03:29:13

标签: c# css parsing

我需要解析的RSS提要工作方式是将所有信息放入CSS中的description元素中以在查看器中创建一个漂亮的表,这使得很难从中解析实际的字符串。例如。以下是描述元素之一:

<table style="border-collapse: collapse; border-spacing: 0; color:#493800; font-size: 11px; border:solid 1px #bababa;    margin: 10px;"><tr><th style="padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;">Start Time</th><td style="padding:5px; margin:0; background:#fff;">21/11/2013 19:30 UTC</td></tr><tr><th style="padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;">Backup Job</th><td style="padding:5px; margin:0; background:#fff;">Backup</td></tr><tr><th style="padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;">Computer</th><td style="padding:5px; margin:0; background:#fff;">theComputer</td></tr><tr><th style="padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;">Disk</th><td style="padding:5px; margin:0; background:#fff;">theDisk</td></tr><tr><th style="padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;">Username</th><td style="padding:5px; margin:0; background:#fff;">theUsername</td></tr><tr><th style="padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;">Searched</th><td style="padding:5px; margin:0; background:#fff;">112306 (52.5 GB)</td></tr><tr><th style="padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;">Uploaded</th><td style="padding:5px; margin:0; background:#fff;">121 (29.1 MB)</td></tr><tr><th style="padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;">Duration</th><td style="padding:5px; margin:0; background:#fff;">0:19:23</td></tr><tr><th style="padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;">Errors</th><td style="padding:5px; margin:0; background:#fff;">0</td></tr><tr><th style="padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;">Result</th><td style="padding:5px; margin:0; background:#fff;">COMPLETE</td></tr></table> <p><a href="LINK">Details</a></p

在所有的CSS里面是各种各样的东西,比如Computer:Computername,Uploaded:Amountuploaded,我需要得到这些东西但不知道怎么样,我已经尝试过使用HTML敏捷包但是无法让它工作,但我是非常糟糕。

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

http://www.codeproject.com/Articles/169598/Parse-XML-Documents-by-XMLDocument-and-XDocument提供了有关在C#中解析XML内容的一些信息。是的,我觉得你可以使用.NET的Xml对象来解析它。

您需要了解.NET的Xml文档解析。这篇文章是一个好的开始。

要将字符串放入XmlDocument,只需使用:

string xTxt = "<table style=\"border-collapse: collapse; border-spacing: 0; color:#493800; font-size: 11px; border:solid 1px #bababa;    margin: 10px;\"><tr><th style=\"padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;\">Start Time</th><td style=\"padding:5px; margin:0; background:#fff;\">21/11/2013 19:30 UTC</td></tr><tr><th style=\"padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;\">Backup Job</th><td style=\"padding:5px; margin:0; background:#fff;\">Backup</td></tr><tr><th style=\"padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;\">Computer</th><td style=\"padding:5px; margin:0; background:#fff;\">theComputer</td></tr><tr><th style=\"padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;\">Disk</th><td style=\"padding:5px; margin:0; background:#fff;\">theDisk</td></tr><tr><th style=\"padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;\">Username</th><td style=\"padding:5px; margin:0; background:#fff;\">theUsername</td></tr><tr><th style=\"padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;\">Searched</th><td style=\"padding:5px; margin:0; background:#fff;\">112306 (52.5 GB)</td></tr><tr><th style=\"padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;\">Uploaded</th><td style=\"padding:5px; margin:0; background:#fff;\">121 (29.1 MB)</td></tr><tr><th style=\"padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;\">Duration</th><td style=\"padding:5px; margin:0; background:#fff;\">0:19:23</td></tr><tr><th style=\"padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;\">Errors</th><td style=\"padding:5px; margin:0; background:#fff;\">0</td></tr><tr><th style=\"padding:5px; background:#ddd; border:solid 1px #bababa; color:#493800; font-size: 10px;\">Result</th><td style=\"padding:5px; margin:0; background:#fff;\">COMPLETE</td></tr></table><p><a href=\"LINK\">Details</a></p>";
XmlDocument d = new XmlDocument();
d.LoadXml("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>" + xTxt + "</root>");

string t = null;
XmlNodeList trNodes = d.SelectNodes("//tr");
foreach (XmlNode n in trNodes)
{
    XmlNode thNode = n.SelectSingleNode("th");
    XmlNode tdNode = n.SelectSingleNode("td");
    t += thNode.InnerText + ':';
    t += tdNode.InnerText + Environment.NewLine;
}
txtInfo.AppendText("nodes.Count = " + nodes.Count + '\n');
txtInfo.AppendText(t);

请注意,您想要的每个项目都在TR HTML元素中,其中包含TH元素中项目的名称和TD元素中的值。这有助于您轻松找到它们。所以我们用上面的代码抓住trNode中的所有10'tr'元素。

在上面的示例中,我有一个名为txtInfo的TextBox,用于查看我的结果。但我鼓励你甚至不把结果存储在字符串变量中。我对t字符串变量的使用很简单,因此您可以看到将项目转换为另一种形式的一种方法。当然,那些thNode.InnerText和tdNode.InnerText方法是抓取每个项目的。

你可能想要创建一个List项,或者你可能想要创建一个专门拥有每个属性的类,但我不知道每个属性是否会改变。但是你可以创建一个完成所有这些处理的类,并在你的项目中使用该类。任何你想要的。 :)

快乐的编码!