Предполагая, что данные находятся в объекте Pandas DataFrame df
,
df['File_attribute'] = '{}'
df['Region_attribute'] = '{}'
//Create our own namespaces for the output
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
//Add an empty namespace and empty value
ns.Add("", "");
//Create the serializer
XmlSerializer slz = new XmlSerializer(someType);
//Serialize the object with our own namespaces (notice the overload)
slz.Serialize(myXmlTextWriter, someObject, ns)
Есть альтернатива - вы можете предоставить член типа XmlSerializerNamespaces в типе для сериализации. Украсьте его атрибутом XmlNamespaceDeclarations . Добавьте префиксы пространства имен и URI к этому члену. Затем любая сериализация, которая явно не предоставляет XmlSerializerNamespaces, будет использовать пары префикс пространства имен + URI, которые вы поместили в свой тип.
Пример кода, предположим, что это ваш тип:
[XmlRoot(Namespace = "urn:mycompany.2009")]
public class Person {
[XmlAttribute]
public bool Known;
[XmlElement]
public string Name;
[XmlNamespaceDeclarations]
public XmlSerializerNamespaces xmlns;
}
Вы можете сделать это:
var p = new Person
{
Name = "Charley",
Known = false,
xmlns = new XmlSerializerNamespaces()
}
p.xmlns.Add("",""); // default namespace is emoty
p.xmlns.Add("c", "urn:mycompany.2009");
И это будет означать, что при любой сериализации этого экземпляра, в которой не указан собственный набор пар префикс + URI, будет использоваться символ "p "префикс для пространства имен" urn: mycompany.2009 ". Он также будет опускать пространства имен xsi и xsd.
Разница в том, что вы добавляете пространства имен XmlSerializerNamespace к самому типу, вместо того, чтобы использовать его явно при вызове XmlSerializer.Serialize (). Это означает, что если экземпляр вашего типа сериализуется с помощью кода, которым вы не владеете (например, в стеке веб-служб), и этот код явно не предоставляет XmlSerializerNamespaces, этот сериализатор будет использовать пространства имен, предоставленные в экземпляре.