【问题标题】: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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      相关资源
      最近更新 更多