使用 C# 使用 XDocument 解析 XML [重复]
Posted
技术标签:
【中文标题】使用 C# 使用 XDocument 解析 XML [重复]【英文标题】:Parse XML with XDocument using C# [duplicate] 【发布时间】:2016-05-02 18:07:50 【问题描述】:我有以下 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<html>
<body>
<p><p>
<span class="screenitems">
Close
<MCap:variable name="1052.zartzut"></MCap:variable>
without prompting if you launch a non-
<MCap:variable name="zirtZat"></MCap:variable>
measurement module. (You will be prompted to save any unsaved data.)
<span lol="scs">dsfsfs</span>
</span>
</p></p>
</body>
</html>
我只想删除<span class="screenitems">
和对应的结束标签</span>
,所以解析后应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<html>
<body>
<p><p>
Close
<MCap:variable name="1052.zartzut"></MCap:variable>
without prompting if you launch a non-
<MCap:variable name="zirtZat"></MCap:variable>
measurement module. (You will be prompted to save any unsaved data.)
<span lol="scs">dsfsfs</span>
</p></p>
</body>
</html>
<span class="screenitems">
是唯一的唯一标签,所以在它和<html>
之间,你可以拥有一切。你能用C#
中的XDocument
方法帮助我解决这个问题吗?
【问题讨论】:
通常XDocument
以及任何其他 xml 解析器都不是解析 html 的最佳工具。原因是不需要的有效 html 代码将是有效的 xml。你最好使用一些 html 解析器,例如 html agility pack。
这与您的last question 有何不同?您应该只更新该问题而不是开始另一个问题。
@AndyKorneyev 这将在另一个程序中使用,它要求它是一个有效的 XML 文件。
@CharlesMager 我不知道不同的情况,我已经接受了答案。这就是为什么。
我不关注。您之前的问题没有被接受的答案,您对 cmets 中的问题也没有回复。我在那里添加了一个答案。如果我要回答这个问题,我会给出同样的答案。
【参考方案1】:
static void Main(string[] args)
string html = @"<?xml version=""1.0"" encoding=""utf-8""?>
<html>
<body>
<p><p>
<span class=""screenitems"">
Close
<MCap:variable name=""1052.zartzut""></MCap:variable>
without prompting if you launch a non-
<MCap:variable name=""zirtZat""></MCap:variable>
measurement module. (You will be prompted to save any unsaved data.)
<span lol=""scs"">dsfsfs</span>
</span>
</p></p>
</body>
</html>";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var spanNode = doc.DocumentNode.Descendants().Where(x => x.Name == "span" && x.Attributes["class"].Value == "screenitems").First();
var parent = spanNode.ParentNode;
parent.RemoveChild(spanNode, true);
Console.WriteLine(doc.DocumentNode.OuterHtml);
您应该使用 Html 解析器,在这里您可以如何使用 Html Agility Pack 来做到这一点。这里的窍门是parent.RemoveChild(Node, keepGrandChilds);
【讨论】:
以上是关于使用 C# 使用 XDocument 解析 XML [重复]的主要内容,如果未能解决你的问题,请参考以下文章
当数据集WriteXml()函数生成xml文件时,C#如何使用XDocument类更新xml文件