如何强制首先列出默认的XML命名空间?

时间:2013-07-10 15:19:17

标签: .net xml xml-serialization xml-namespaces

我正在使用来自组织外部的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放在根元素的末尾。

有没有办法强制首先列出默认命名空间?

1 个答案:

答案 0 :(得分:0)

理想情况下,让他们修复破碎的解析器。 XSD中描述XML的属性不是有序项。

除非您在生成内容后可能需要执行类似Regex替换的操作。类似下面的代码应该是一个有用的起点。

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");