【问题标题】:Convert XML self closing tags to open and closing tag将 XML 自关闭标签转换为打开和关闭标签
【发布时间】:2018-04-03 18:00:03
【问题描述】:

我有一个完整的 XML 文档字符串,我应该将自结束标记替换为开始和结束标记。

例如:<name />

应转换为:<name></name>

我尝试不使用正则表达式:

myXML.Replace("<name />","<name></name>");

工作,但仅适用于这个标签,这就是为什么我想用正则表达式来支持 XML 文档的所有可能的 XML 标签而不替换特定的 XML 节点。

我接受任何解决问题的建议。 提前致谢。

【问题讨论】:

  • 一般来说:为什么?它们是完全有效的。如果您坚持:&lt;(.*?)\s*/&gt; 并将其替换为 &lt;$1&gt;&lt;/$1&gt;,请在此处查看演示:regex101.com/r/P4qmhR/1
  • 标签包含什么属性? @Jan,该正则表达式不安全,因为 . 匹配任何字符。
  • 另外在 ideone.com 上查看演示:ideone.com/zP6VGv
  • 从正则表达式开始: (?) 然后改进它以更好地适应您的 xml 中的所有情况.

标签: c# .net regex xml


【解决方案1】:

也可以作为答案:您可以使用

<(.*?)\s*/> 

并将其替换为&lt;$1&gt;&lt;/$1&gt;,参见a demo on regex101.com

【讨论】:

    【解决方案2】:

    接受的答案会将潜在属性放在结束标记和开始标记上。

    我必须为一组 SVG 创建结束标签以支持 IE11。如果您只需要在开始标记上具有属性,请使用以下解决方案。

    查找:&lt;([a-z]+)+(.*?)\s*/&gt;
    替换:&lt;$1$2&gt;&lt;/$1&gt;

    此解决方案创建两个不同的正则表达式组。 $1 包含 XML 标记。 $2 包含属性。

    【讨论】:

    • 如果您正在寻找许多元素来替换已经转换的元素,请使用/&lt;([a-z]+)+([^&gt;&lt;]*?)\s*\/&gt;/g,它对我有用。
    猜你喜欢
    • 2012-12-11
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    相关资源
    最近更新 更多