【问题标题】:Find and replace text inside xml document using regular expression使用正则表达式查找和替换 xml 文档中的文本
【发布时间】:2012-03-30 19:35:28
【问题描述】:

我正在使用 c# 控制台应用程序来获取 xml 文档。现在,一旦加载了 xmldocument,我想搜索特定的 href 标签:

href="/abc/def

在 xml 文档中。

一旦找到该节点,我想完全剥离标签并只显示 Hello。

<a href="/abc/def">Hello</a>

我想我可以简单地使用正则表达式获取标签。但是谁能告诉我如何使用正则表达式完全删除 href 标签?

【问题讨论】:

  • 对这类东西使用正则表达式是个坏主意,恕我直言 - 如果您正在处理 HTML,那么我建议您使用 HTML Agility pack...
  • @KenWhite - 这是我看过的完全不同的问题。但对我的问题没有帮助。
  • @Yahia - 这不是 html 我在 xml 文档中加载 xml 文件,并希望找到该特定链接并从中删除
  • @NoviceMe,如果你能展示你的xml,我想你能得到更好的答案

标签: c# regex


【解决方案1】:

xml 和 html 相同的区别:标记的内容。 xml 的格式更严格。 对于这个用例,我将使用转换和 xpath 查询来重建文档。正如@Yahia 所说,标记文档上的正则表达式通常是一个坏主意。用于解析的正则表达式非常复杂,无法作为通用解决方案产生影响。

【讨论】:

    【解决方案2】:

    用于类似任务的最流行技术称为 XPath。 (它也是 XQuery 和 XSLT 的关键组件。)以下内容是否也能解决您的任务?

    root.SelectSingleNode("//a[@href='/abc/def']").InnerText = "Hello";
    

    【讨论】:

      【解决方案3】:

      你可以试试

      string x = @"<?xml version='1.0'?> 
       <EXAMPLE>  
          <a href='/abc/def'>Hello</a> 
       </EXAMPLE>";
      
       System.Xml.XmlDocument doc = new XmlDocument();
       doc.LoadXml(x);
       XmlNode n = doc.SelectSingleNode("//a[@href='/abc/def']");
       XmlNode p = n.ParentNode;
       p.RemoveChild(n);
       System.Xml.XmlNode newNode = doc.CreateNode("element", "a", "");
       newNode.InnerXml = "Hello";
       p.AppendChild(newNode);
      

      不确定这是否是您想要做的,但它应该足以让您朝着正确的方向前进。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-12
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 2020-07-04
        • 2013-07-11
        • 1970-01-01
        相关资源
        最近更新 更多