将 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 节点。
我接受任何解决问题的建议。 提前致谢。
【问题讨论】:
一般来说:为什么?它们是完全有效的。如果您坚持:<(.*?)\s*/>
并将其替换为 <$1></$1>
,请在此处查看演示:regex101.com/r/P4qmhR/1
标签包含什么属性? @Jan,该正则表达式不安全,因为 .
匹配任何字符。
另外在 ideone.com 上查看演示:ideone.com/zP6VGv
从正则表达式开始: (?也可以作为答案:您可以使用
<(.*?)\s*/>
并将其替换为<$1></$1>
,参见a demo on regex101.com。
【讨论】:
【参考方案2】:接受的答案会将潜在属性放在结束标记和开始标记上。
我必须为一组 SVG 创建结束标签以支持 IE11。如果您只需要在开始标记上具有属性,请使用以下解决方案。
查找:<([a-z]+)+(.*?)\s*/>
替换:<$1$2></$1>
此解决方案创建两个不同的正则表达式组。 $1
包含 XML 标记。 $2
包含属性。
【讨论】:
如果您正在寻找许多元素来替换已经转换的元素,请使用/<([a-z]+)+([^><]*?)\s*\/>/g
,它对我有用。以上是关于将 XML 自关闭标签转换为打开和关闭标签的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中使用添加的自定义标签将 JSON 转换为 XML