q1 ???

  • Thread starter Thread starter Tom
  • Start date Start date
T

Tom

This is probably easy, but I have spent several hours trying to get it to
work with no luck.

I'm just using the XmlSerializer class to write an XML file:

XmlSerializer s = new XmlSerializer(typeof(myType));;
XmlSerializerNamespaces n = new XmlSerializerNamespaces();
n.Add(string.Empy, string.Empy);
Stream fs = new FileStream(name, FileMode.Create);
XmlTextWriter tw = new XmlTextWriter(fs, Encoding.UTF8);
tw.Formatting = Formatting.None;
s.Serialize(tw, myObject, n);
tw.Close();

Anyway, the above works almost to what I want, but it produces the following
XML file:

<?xml version="1.0" encoding="utf-8" ?>
<q1:myObjElement1 xmlns:q1="myXSD.xsd">
<MyElement2>
<MyElement3>
</MyElement3>
</MyElement2>
</q1:myObjeElement1>

My problem is that I want to get rid of that "q1:" string, and just
serialize my object into XML. What is the "q1:" string anyway, and why is
it there?

I can get rid of the "q1:" string by changing the following attribute in my
code from:

[System.Xml.Serialization.XmlRootAttribute(IsNullable = false,
Namespace="myXSD.xsd")];

to:

[System.Xml.Serialization.XmlRootAttribute(IsNullable = false)];

However, if I do that, then I get:
<?xml version="1.0" encoding="utf-8" ?>
<myObjElement1>
<MyElement2>
<MyElement3>
</MyElement3>
</MyElement2>
</myObjeElement1>

The problem here is that I need the line:

<myObjElement1>

to really read:

<myObjElement1 xmlns="myXSD.xsd">


So in short:
How can I get rid of the "q1:" string and keep the xmlns attribute in my
root element?

Thank you.
 
Tom said:
This is probably easy, but I have spent several hours trying to get it to
work with no luck.

I'm just using the XmlSerializer class to write an XML file:

XmlSerializer s = new XmlSerializer(typeof(myType));;
XmlSerializerNamespaces n = new XmlSerializerNamespaces();
n.Add(string.Empy, string.Empy);
Stream fs = new FileStream(name, FileMode.Create);
XmlTextWriter tw = new XmlTextWriter(fs, Encoding.UTF8);
tw.Formatting = Formatting.None;
s.Serialize(tw, myObject, n);
tw.Close();

Anyway, the above works almost to what I want, but it produces the
following XML file:

<?xml version="1.0" encoding="utf-8" ?>
<q1:myObjElement1 xmlns:q1="myXSD.xsd">
<MyElement2>
<MyElement3>
</MyElement3>
</MyElement2>
</q1:myObjeElement1>

My problem is that I want to get rid of that "q1:" string, and just
serialize my object into XML. What is the "q1:" string anyway, and why is
it there?

I can get rid of the "q1:" string by changing the following attribute in
my code from:

[System.Xml.Serialization.XmlRootAttribute(IsNullable = false,
Namespace="myXSD.xsd")];

to:

[System.Xml.Serialization.XmlRootAttribute(IsNullable = false)];

However, if I do that, then I get:
<?xml version="1.0" encoding="utf-8" ?>
<myObjElement1>
<MyElement2>
<MyElement3>
</MyElement3>
</MyElement2>
</myObjeElement1>

The problem here is that I need the line:

<myObjElement1>

to really read:

<myObjElement1 xmlns="myXSD.xsd">


So in short:
How can I get rid of the "q1:" string and keep the xmlns attribute in my
root element?

Thank you.

Well, since I couldn't find an easy way to do this, I just added the
attribute after I created the file:

XmlDocument d = new XmlDocument();
XmlElement e;
FileStream fs = new FileStream("myFile", FileMode.Open, FileMode.Read,
FileMode.Read);
XmlTextReader tr = new XmlTextReader(fs);
d.Load(tr);
tr.Close();
e = d.DocumentElement;
e.SetAttribute("xmlns", "myNamespace");
d.Save("myFile");
 
Tom said:
This is probably easy, but I have spent several hours trying to get it to
work with no luck.

I'm just using the XmlSerializer class to write an XML file:

XmlSerializer s = new XmlSerializer(typeof(myType));;
XmlSerializerNamespaces n = new XmlSerializerNamespaces();
n.Add(string.Empy, string.Empy);
Stream fs = new FileStream(name, FileMode.Create);
XmlTextWriter tw = new XmlTextWriter(fs, Encoding.UTF8);
tw.Formatting = Formatting.None;
s.Serialize(tw, myObject, n);
tw.Close();

Anyway, the above works almost to what I want, but it produces the
following XML file:

<?xml version="1.0" encoding="utf-8" ?>
<q1:myObjElement1 xmlns:q1="myXSD.xsd">
<MyElement2>
<MyElement3>
</MyElement3>
</MyElement2>
</q1:myObjeElement1>

My problem is that I want to get rid of that "q1:" string, and just
serialize my object into XML. What is the "q1:" string anyway, and why is
it there?

I can get rid of the "q1:" string by changing the following attribute in
my code from:

[System.Xml.Serialization.XmlRootAttribute(IsNullable = false,
Namespace="myXSD.xsd")];

to:

[System.Xml.Serialization.XmlRootAttribute(IsNullable = false)];

However, if I do that, then I get:
<?xml version="1.0" encoding="utf-8" ?>
<myObjElement1>
<MyElement2>
<MyElement3>
</MyElement3>
</MyElement2>
</myObjeElement1>

The problem here is that I need the line:

<myObjElement1>

to really read:

<myObjElement1 xmlns="myXSD.xsd">


So in short:
How can I get rid of the "q1:" string and keep the xmlns attribute in my
root element?

Thank you.
It's not really an attribute, it's a namepace declaration.
It shouldn't matter to other processes whether it has a prefix or is a
default namespace.
However:
[XmlRoot(Namespace ="myXSD.xsd", ElementName = "myObjElement1")]
should get you <myObjElement1 xmlns="myXSD.xsd">
 
Back
Top