【问题标题】:C# parse XML from HTML Body and save to fileC# 从 HTML Body 解析 XML 并保存到文件
【发布时间】:2021-05-23 13:11:32
【问题描述】:

C# 在从 API 执行 GET 后返回嵌入在 HTML 文件中的 XML 代码,类似于:

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta name="viewport" content="initial-scale=1, width=device-width">
        <title>config</title>
    </head>
    <body>
        
<CONFIG="2"/>
<VALUE1="1"/>
<VALUE2="2"/>
<CONFIGEND="0"/>

    </body>
</html>

我正在尝试将正文“”中的 XML 内容保存到文件中。我使用 HtmlAgilityPack 的尝试导致 XML 数据被修改如下:

<CONFIG="2"></CONFIG>
...
<CONFIGEND="0"></CONFIGEND>

我是 C# 新手(和一般编程),所以请善待。搜索尝试让我比开始时更加困惑:/

【问题讨论】:

  • 嗨!欢迎来到 SO!您使用的 API 是什么以及为什么需要将 XML 放入 HTML 中?

标签: c# html xml


【解决方案1】:

如果格式一致1(例如,您总是想要&lt;body&gt;...&lt;/body&gt; 之间的所有内容),那么一种方法是使用正则表达式:

string pattern = @"<body>(.*)</body>";  
Regex rg = new Regex(pattern);  
        
string html = "<body>Content here</body>";  
        
// get first match and print it
Match firstMatch = rg.Matches(html)[0];
Console.WriteLine(firstMatch.Groups[1]); // "Content here" 

(PS:这需要using System.Text.RegularExpressions;


1牢记this

【讨论】:

  • 感谢@Anis R.,它让我走上了正确的道路。我不得不稍微修改你的,引用brightfunction.co.uk/remove-html-with-regular-expressions
  • "如果格式一致" - if 是这里的操作词。正则表达式should not 用于解析HTML。虽然它可能适用于这种特殊情况,但总的来说,这是一个坏主意。
  • @Riwen 绝对!我想我应该更好地强调它 - 答案已编辑。但是,如果您只想处理非常具体的情况(如此处),则可以。
  • @Riwen 我尝试了其他几种方法,但总是以修改后的 XML 数据结束。我理解 RegEx 通常不应该使用 - 这是一个非常特殊的情况,格式永远不会偏离。如果您有解决方案,我欢迎!
【解决方案2】:

是的,您已经发现 HtmlAgilityPack 正在转换一些东西。 Html 实际上是一个 Xml 文件。但是 System.Xml.XmlDocument 不能处理这个 html 文件。所以需要手动解析。

正如 Anis R. 所说,最好的方法是正则表达式。要使用正则表达式,您需要在第一行添加using System.Text.RegularExpressions;

假设您的 Html 内容在 htmlstring 变量中。

首先,您需要为您的案例定义模式。

string regexPattern = @"\<body\>(.*?)\<\/body\>";
Regex regex = new Regex(regexPattern, RegexOptions.Singleline);

您需要使用 RegexOptions.Singleline 选项。因为你的 html 内容会有换行符。

string body = regex.Match(htmlstring).Value;

有了这个,你将拥有:

<body>
        
<CONFIG="2"/>
<VALUE1="1"/>
<VALUE2="2"/>
<CONFIGEND="0"/>

    </body>

删除正文标签;

string result = body.Replace("<body>", "").Replace("</body>", "");

修剪前导和尾随空格;

string prettierResult = result.Trim();

现在你有;

<CONFIG="2"/>
<VALUE1="1"/>
<VALUE2="2"/>
<CONFIGEND="0"/>

将内容保存到文件;

File.WriteAllText("c:\\path-to-save", prettierResult);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 2012-05-24
    • 2020-04-15
    • 2017-05-04
    • 2013-11-30
    • 2020-11-07
    • 2013-03-04
    • 2013-07-02
    相关资源
    最近更新 更多