gpt4 book ai didi

c# - 使用 C# 从 html 中删除自定义 xml 标签

转载 作者:行者123 更新时间:2023-11-30 17:41:07 25 4
gpt4 key购买 nike

我有一个带有一些 html 代码的字符串。但是我需要将该 html 解析为 XDocument .

string input = String.Concat("<root>", htmlString, "</root>");
var doc = XDocument.Parse(input);

但有时在我的htmlString有像 <o:p></o:p> 这样的标签,例如,以及 XDocument.Parse() 中的那个我得到了异常(exception):

The ':' character, hexadecimal value 0x3A, cannot be included in a name. Line 1, position 650.

如何删除该标签或至少替换 ':'在标签名称中?

在进行解析之前,我试图删除/替换 ':'但它不起作用:

try
{
Regex regex = new Regex(@"<[:][^>]+>.+?</\[:]>");
while (regex.IsMatch(htmlString))
{
htmlString= regex.Replace(htmlString, "");
}
}
catch { }

HTML 示例

<p>Some text</p>

<p class="MsoNormal" style="TEXT-ALIGN: justify; MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%">
<?xml:namespace prefix="o" ns="urn:schemas-microsoft-com:office:office"?>
<o:p> </o:p>
</p>

<p>More text</p>

更新

我正在使用 HtmlAgilityPack但它不会删除此标签。

我的代码

ConfigureHtmlDocument();

var htmlDoc = new HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.LoadHtml(htmlString);

var htmlError = htmlDoc.ParseErrors.SafeAny();

if (!htmlError)
htmlString= htmlDoc.DocumentNode.InnerHtml;

try
{
Regex regex = new Regex(@"<[:][^>]+>.+?</\[:]>");
while (regex.IsMatch(htmlString))
{
htmlString= regex.Replace(htmlString, "");
}
}
catch { }

string input = String.Concat("<root>", htmlString, "</root>");
var doc = XDocument.Parse(input);

//more code

ConfigureHtmlDocument()

    if (!HtmlNode.ElementsFlags.ContainsKey("p"))
HtmlNode.ElementsFlags.Add("p", HtmlElementFlag.Closed);
else
HtmlNode.ElementsFlags["p"] = HtmlElementFlag.Closed;

if (!HtmlNode.ElementsFlags.ContainsKey("ul"))
HtmlNode.ElementsFlags.Add("ul", HtmlElementFlag.Closed);
else
HtmlNode.ElementsFlags["ul"] = HtmlElementFlag.Closed;

if (!HtmlNode.ElementsFlags.ContainsKey("li"))
HtmlNode.ElementsFlags.Add("li", HtmlElementFlag.Closed);
else
HtmlNode.ElementsFlags["li"] = HtmlElementFlag.Closed;

if (!HtmlNode.ElementsFlags.ContainsKey("ol"))
HtmlNode.ElementsFlags.Add("ol", HtmlElementFlag.Closed);
else
HtmlNode.ElementsFlags["ol"] = HtmlElementFlag.Closed;

//more similar code

最佳答案

解决了!正则表达式错误。我用这个替换了表达式:

//for remove xml declarations
htmlString = Regex.Replace(texto, @"<\?xml.*\?>", "");

//for remove custom tags like <o:p> and </o:p>
htmlString = Regex.Replace(texto, @"<(?:[\S]\:[\S])[^>]*>", "");
htmlString = Regex.Replace(texto, @"</(?:[\S]\:[\S])[^>]*>", "");

现在可以了!

关于c# - 使用 C# 从 html 中删除自定义 xml 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33434363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com