【问题标题】:How can I force the default XML namespace to be listed first?如何强制首先列出默认 XML 命名空间?
【发布时间】:2013-07-10 15:19:17
【问题描述】:
我正在使用我的组织外部的 xml 规范。我需要生成一个符合规范的 xml 文件。除非默认命名空间 xmlns="ndnqi" 首先列在根元素上,否则文件将无法正确验证,如下所示:
<HospYearQtr xmlns="ndnqi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="ndnqi NDNQIV10.xsd">
我使用 xsd.exe 从 XSD 生成类,当我序列化为 xml 时,它会将默认命名空间 xmlns 放在根元素的末尾。
有什么办法可以强制把默认命名空间排在最前面?
【问题讨论】:
标签:
.net
xml
xml-serialization
xml-namespaces
【解决方案1】:
理想情况下,让他们修复损坏的解析器。 XSD 描述的 XML 中的属性不是有序项。
除非您在生成内容后可能需要执行正则表达式替换等操作。下面的代码应该是一个有用的起点。
Regex moveDefaultNamespace = new Regex(@"(<\w+)\s+(.*?)(xmlns="".+?"")\s+(.*?>)");
string xmlText = "<HospYearQ1tr xmlns=\"ndnqi\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"ndnqi NDNQIV10.xsd\">";
string reordered = moveDefaultNamespace.Replace(xmlText, "$1 $2 $3 $4");