c# xml 将 xmlns:noNamespaceSchemaLocation 替换为 NS0:noNamespaceSchemaLocation

c# xml replace xmlns:noNamespaceSchemaLocation with NS0:noNamespaceSchemaLocation

我需要使用 C# MVC 应用程序生成一个 xml 文件,该文件具有以下属性:

<File NS0:noNamespaceSchemaLocation="myXML.xsd" xmlns:NS0="http://www.w3.org/2001/XMLSchema-instance">

注意 noNamespaceSchemaLocation 前缀是 NS0

这是我现在拥有的:

<File xmlns:noNamespaceSchemaLocation="myXML.xsd" xmlns:NS0="http://www.w3.org/2001/XMLSchema-instance">

我的文件前缀是xmlns,第一次需要生成xml文件,所以不知道是不是if的要求出错我只是遗漏了一些东西,我正在使用 XmlSerealizerNamespaces class

添加属性
var xmlNameSpace = new XmlSerializerNamespaces();
xmlNameSpace.Add( "NS0", "http://www.w3.org/2001/XMLSchema-instance" );
xmlNameSpace.Add( "noNamespaceSchemaLocation", "myXML.xsd" );

我已经放弃使用 Xml 库来创建命名空间。而不是仅仅解析字符串

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApp1
{
    class Program
    {
        
        static void Main(string[] args)
        {
            string xml = "<File NS0:noNamespaceSchemaLocation=\"myXML.xsd\" xmlns:NS0=\"http://www.w3.org/2001/XMLSchema-instance\"></File>";

            XDocument doc = XDocument.Parse(xml);

        }
    }

}

xmlns:NS0 属性是命名空间声明,您已将其正确添加到 XmlSerializerNamesapces

NS0:noNamespaceSchemaLocation 只是一个属性,它需要成为您模型的一部分。所以一个非常简单的模型:

public class File
{
    [XmlAttribute("noNamespaceSchemaLocation", 
        Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
    public string NoNamespaceSchemaLocation { get; set; } = "myXML.xsd"
}

在这里您可以看到我们定义了属性的名称和命名空间。此命名空间的前缀将从 XmlSerializerNamespaces 提取为 NS0。序列化后的输出将是:

<File xmlns:NS0="http://www.w3.org/2001/XMLSchema-instance" NS0:noNamespaceSchemaLocation="myXML.xsd" />

有关工作演示,请参阅 this fiddle