0

我在 C# 中使用 streamreader,我的目标是用它读取一个文本文件,它必须过滤掉标签之间的文本(如<Test> </Test><Name> </Name>)并获取标签的名称,如(测试或名称),然后将其保存到一个字符串稍后使用的标签名称。我已经在互联网上搜索了几天,但找不到任何东西,而且我对 C# 没有太多经验,但希望有人可以帮助我。该文件本身是一个 .txt 文件

这是我到目前为止的代码:

class Program
    {
        static void Main(string[] args)
        {

            using (StreamReader sr = new StreamReader(@"C:\testfile.txt"))
            {

                String line;
                // Read line by line
                while ((line = sr.ReadLine()) != null)
                {
                    Console.WriteLine(line);

                }
            }
            Console.ReadKey();
        }

    }

例如,预期输出是一个字符串,其中 name = 纯文本中名称标签之间的所有内容,然后 test = 纯文本中测试标签之间的所有内容。对不起我的英语不好,但我希望有人可以帮助我。

4

3 回答 3

2

您可以使用 XmlDocument

        XmlDocument Info_Document = new XmlDocument();
        Info_Document.Load(@"D:\saraxml.txt");
        XmlNodeList xmlnodelist = Info_Document.GetElementsByTagName("Name");//finding all nodes called "Name"
            foreach (XmlNode c in xmlnodelist)
            {
               string _name=c.InnerText;
            }

对于这个文件:

<test>
<Name> h0</Name>

<Name> h1</Name>

<Name> h2</Name>

<Name> h3</Name>

<Name> h4</Name>

<Name> h5</Name>
</test>

我有:

h0

h1

h2

h3

h4

h5

于 2012-11-14T08:21:52.303 回答
0

如果文件是 HTML,可以使用HTML Agility 包 解析文件,然后通过标签名查询结果。这比正则表达式更受欢迎,因为它可以更好地处理所有复杂性,例如嵌套标签、结构不佳的 html 等。尝试使用正则表达式解析 HTML 可能会导致精神错乱

如果是纯 XML,那么您可以以类似的方式使用XMLDocument 。

否则,您将需要编写一个自定义解析器,这是一个更加复杂和耗时的企业。

如果您的文件符合常规语法,则可以构建递归下降解析器。

于 2012-11-14T08:21:18.497 回答
0

我建议您使用正则表达式来过滤文本:

http://msdn.microsoft.com/fr-fr/library/system.text.regularexpressions.regex.aspx

此处提供了一个示例:

http://www.dotnetperls.com/remove-html-tags

于 2012-11-14T08:15:53.827 回答