【发布时间】:2021-11-01 16:16:57
【问题描述】:
我有一个无效的 xml 文件(由多个 xml 文件的串联产生)。是否可以从这里清除不需要的重复节点(root 和 xml):
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Client>client1</Client>
<ClientType>1</ClientType>
</root><?xml version="1.0">
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Client>client2</Client>
</root><?xml version="1.0" encoding="utf-8"?>
<root>
<Client>client3</Client>
</root>
到这里:
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Client>client1</Client>
<ClientType>1</ClientType>
<Client>client2</Client>
<Sex>1</Sex>
<Client>client3</Client>
<Sex>1</Sex>
</root>
我已经开始使用正则表达式来查找“xml”和“root”的出现,
var test = Regex.Matches(input, "<\\?xml").Count;
但我有两个困难: 1/ 删除除第一个和最后一个以外的所有根节点。 (也许使用 IndexOf 函数?) 2/ 管理稍有不同的节点,例如
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
和
<root>
必须以同样的方式对待
【问题讨论】:
-
XmlSerializer 适用于不验证 xml 文件?
-
格式良好的 XML 仅在根标记上。您的 XML 格式不正确,但根据 XML 规范是有效的。在 Net 库中,您必须使用具有以下设置的 XmlReader: XmlReaderSettings settings = new XmlReaderSettings(); settings.ConformanceLevel = ConformanceLevel.Fragment;我昨天用它来回答。请参阅:stackoverflow.com/questions/69042159/…
-
XML 无法容忍格式正确的错误,因此任何支持 XML 的应用程序都应该拒绝此类文档。试图即时修复解析错误可能是错误的方法,你应该问问自己你是否真的想要或需要这个。 XML不类似于 HTML,语法错误通常是可以原谅的。 XML 类似于编程代码。一切都必须完美,否则就不是 XML。