【问题标题】:Parse XML with XDocument using C# [duplicate]使用 C# 使用 XDocument 解析 XML [重复]
【发布时间】: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>

我只想删除&lt;span class="screenitems"&gt;和对应的结束标签&lt;/span&gt;,所以解析后应该是这样的:

<?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>

&lt;span class="screenitems"&gt; 是唯一的唯一标签,所以在它和&lt;html&gt; 之间,你可以拥有一切。你能用C# 中的XDocument 方法帮助我解决这个问题吗?

【问题讨论】:

  • 通常XDocument 以及任何其他 xml 解析器都不是解析 html 的最佳工具。原因是不需要的有效 html 代码将是有效的 xml。你最好使用一些 html 解析器,例如 html agility pack。
  • 这与您的last question 有何不同?您应该只更新该问题而不是开始另一个问题。
  • @AndyKorneyev 这将在另一个程序中使用,它要求它是一个有效的 XML 文件。
  • @CharlesMager 我不知道不同的情况,我已经接受了答案。这就是为什么。
  • 我不关注。您之前的问题没有被接受的答案,您对 cme​​ts 中的问题也没有回复。我在那里添加了一个答案。如果我要回答这个问题,我会给出同样的答案。

标签: c# html xml xml-parsing linq-to-xml


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多