C# 使用C使用XDocument解析XML#
我有以下XML文件:C# 使用C使用XDocument解析XML#,c#,html,xml,xml-parsing,linq-to-xml,C#,Html,Xml,Xml Parsing,Linq To Xml,我有以下XML文件: <?xml version="1.0" encoding="utf-8"?> <html> <body> <p><p> <span class="screenitems"> Close <MCap:variable name="1052.zartzut"></MCap:varia
<?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>
接近
如果您启动了非-
测量模块。(系统将提示您保存所有未保存的数据。)
dsfsfs
我只想删除
和相应的结束标记
,因此解析后应该如下所示:
<?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>
接近
如果您启动了非-
测量模块。(系统将提示您保存所有未保存的数据。)
dsfsfs
是唯一唯一唯一的标记,因此在此标记和
之间,您可以拥有所有内容。您可以使用C#
中的XDocument
方法帮助我解决这个问题吗?静态void Main(string[]args)
{
字符串html=@”
接近
如果您启动了非-
测量模块。(系统将提示您保存所有未保存的数据。)
dsfsfs
";
HtmlDocument doc=新的HtmlDocument();
doc.LoadHtml(html);
var spanNode=doc.DocumentNode.subjects()。其中(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)完成的
通常XDocument
以及任何其他xml解析器都不是解析html的最佳工具。其原因是,不需要的有效html代码将是有效的xml。您最好使用一些html解析器,例如html agility pack。这与您的应用程序有何不同?您应该更新该问题,而不是启动另一个问题。@AndyKorneyev这将在另一个程序中使用,该程序要求它是有效的XML文件。@CharlesMager我还没有意识到不同的情况,我已经接受了答案。这就是为什么,我不明白。您之前的问题没有公认的答案,您对评论中的问题也没有回应。我在那里补充了一个答案。如果我要回答这个问题,我会给出同样的答案。
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);
}