C# 使用C使用XDocument解析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文件:

<?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);
}