【问题标题】:Find and Replace text in html file查找和替换 html 文件中的文本
【发布时间】:2014-02-11 18:55:00
【问题描述】:

我正在使用 C# 中的 Winforms。我有以下 Html 文件。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy for Windows (vers 25 March 2009), see www.w3.org" />
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
<link rel="stylesheet" type="text/css" href="styles.css" />
<title></title>
</head>
<body>
<p><b>Chapter 1</b></p>
</body>
</html>

我想用"&lt;link rel="stylesheet" type="text/css" href=""+ htmlFile +"" /&gt;" 替换&lt;link rel="stylesheet" type="text/css" href="styles.css" /&gt; 我已经尝试了以下代码,但它不起作用

 string outpageFile = File.ReadAllText(StaticClass.outpage);
            string htmlFile= StaticClass.ZipFilePath + "\\OEBPS\\styles.css";
            outpageFile = outpageFile.Replace("<link rel='stylesheet' type='text/css' href='styles.css' />", "<link rel='stylesheet' type='text/css' href='"+ htmlFile +"' />");
            File.WriteAllText(StaticClass.outpage, outpageFile);

但它不起作用。主要问题出现在正在使用的双引号中。那怎么办呢??

【问题讨论】:

    标签: c# html winforms file


    【解决方案1】:

    据我了解,您将在 LINK 中有一个动态 HTML 页面 url。 为什么您应该尝试更改整个链接。

    试试这个。在您的 HTML 中制作如下所示的 LINK,这将在您的页面中是唯一的,并用您的新 LINK 单独替换该特定字符串。

    <link rel="stylesheet" type="text/css" href='@MYLINK' />
    

    在应用中

    filenamestring.replace("@MYLINK","http://www.google.com");
    

    这应该可以完美运行

    【讨论】:

    • 但它会替换整个文件中所有出现的“@MYLINK”..但我们只需要在这一点上替换......我们可以有多个“@MYLINK”出现在我们的文件..
    • 嘿伙计。像“@MYLINK1”和“@MYLINK1”这样的唯一名称不应该写在其他任何地方吗?不要让事情变得复杂。简单点。
    【解决方案2】:

    使用 HtmlAgility 包 (http://htmlagilitypack.codeplex.com/) - 正则表达式并不是处理 html 中替换的最佳方式。

    例子:

          string markup = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN""
        ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">
    <html xmlns=""http://www.w3.org/1999/xhtml"">
    <head>
    <meta name=""generator"" content=""HTML Tidy for Windows (vers 25 March 2009), see www.w3.org"" />
    <meta http-equiv=""Content-Type"" content=""text/html; charset=us-ascii"" />
    <link rel=""stylesheet"" type=""text/css"" href=""styles.css"" />
    <title></title>
    </head>
    <body>
    <p><b>Chapter 1</b></p>
    </body>
    </html>";
          var html = new HtmlAgilityPack.HtmlDocument();
          html.LoadHtml(markup);
          var links = html.DocumentNode.SelectNodes("//link");
          foreach (var link in links) {
            link.Attributes["href"].Value = StaticClass.ZipFilePath +
              "\\OEBPS\\styles.css";
          }
    
          var builder = new StringBuilder();
          using (var writer = new StringWriter(builder)) {
            html.Save(writer);
          }
          markup = builder.ToString();
    

    【讨论】:

    • 感谢您的即时回复,但我不想使用任何外部软件包。我想以编程方式进行。
    • @user - 你确定你的 html 会遵守一些标准吗? 也是选项 - 这就是 HtmlAgilityPack 在 html 中进行替换时更好的原因,因为它可以处理很多疯狂的东西,甚至是古怪的东西html ...
    • 但是如果我们在 html 中也添加了 javascripts 文件并且我们也添加了它们的链接。在这种情况下,它也会替换它们的 href 属性,这是我们不想要的。
    • @user - 你真的试过我的代码吗? Javascript 开始
    猜你喜欢
    • 1970-01-01
    • 2020-07-29
    • 2014-07-05
    • 2013-05-23
    • 2013-05-26
    • 2019-07-30
    • 2019-10-16
    • 2012-11-10
    • 2011-07-29
    相关资源
    最近更新 更多