将 XML 自关闭标签转换为打开和关闭标签

Posted

技术标签:

【中文标题】将 XML 自关闭标签转换为打开和关闭标签【英文标题】:Convert XML self closing tags to open and closing tag 【发布时间】: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 中的所有情况. Mandatory link ... 【参考方案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,它对我有用。

以上是关于将 XML 自关闭标签转换为打开和关闭标签的主要内容,如果未能解决你的问题,请参考以下文章

将概率转换为预测标签的最简单和最快的方法是啥? [关闭]

如何在 C# 中使用添加的自定义标签将 JSON 转换为 XML

将应用程序从 iOS 6 转换为 iOS 7 [关闭]

.innerhtml 将 <br/> 标签转换为 <br>

C# - 如何将复杂的 json 转换为 XML,并将名称和值属性转换为标签

如何一次性打开所有关闭的 XML 标签?