From: Steve on
I'm having the same problem. Did anyone ever find a solution?



M1i wrote:

Problem with XmlTextWriter WriteFullEndElement method
24-Nov-08

I???m having a problem with writing full end elements on elements that are
supposed to be empty strings. I???m calling the WriteFullEndElement method on
my elements that are supposed to be empty however it is still creating a self
closing tag. My code is posted below.

Thanks,
Scott


//build xml document
XmlTextWriter xw = new XmlTextWriter(docFullName, Encoding.UTF8);

xw.WriteStartDocument();
xw.WriteStartElement(app.XmlRootName);
xw.WriteAttributeString("version", DateTime.Now.ToShortDateString());

//get application translations
DataTable translations =
ApplicationController.GetTranslations(ApplicationID);
int currentLanguageID = 0;
int languageID;
string languageName;
string languageCode;
string resourceCode;
string translation;
bool isFirstLanguageElement = true;
bool isEmpty;
int counter = 0;

foreach (DataRow t in translations.Rows)
{
languageID = (int)t["LanguageID"];
languageName = t["LanguageName"].ToString();
languageCode = t["LanguageCode"].ToString();
resourceCode = t["ResourceCode"].ToString();
translation = t["Translation"].ToString();
isEmpty = (bool)t["IsEmpty"];

if (currentLanguageID != languageID)
{
if (isFirstLanguageElement)
{
currentLanguageID = languageID;

xw.WriteStartElement("language");

if (app.XmlLanguageElementIdType.ToLower() == "name")
{
xw.WriteAttributeString("name", languageName);
}
else if (app.XmlLanguageElementIdType.ToLower() == "code")
{
xw.WriteAttributeString("code", languageCode);
}

isFirstLanguageElement = false;
}
else
{
xw.WriteEndElement();

currentLanguageID = languageID;
xw.WriteStartElement("language");

if (app.XmlLanguageElementIdType.ToLower() == "name")
{
xw.WriteAttributeString("name", languageName);
}
else if (app.XmlLanguageElementIdType.ToLower() == "code")
{
xw.WriteAttributeString("code", languageCode);
}
}
}

xw.WriteStartElement(app.XmlTranslationElementName);
xw.WriteAttributeString("id", resourceCode);

if (isEmpty)
{
xw.WriteString("");
xw.WriteFullEndElement();
}
else
{
xw.WriteString(translation);
xw.WriteEndElement();
}

counter += 1;
if (counter == translations.Rows.Count)
xw.WriteEndElement();
}

xw.WriteEndElement();
xw.Close();

Previous Posts In This Thread:

On Monday, November 24, 2008 1:43 PM
M1i wrote:

Problem with XmlTextWriter WriteFullEndElement method
I???m having a problem with writing full end elements on elements that are
supposed to be empty strings. I???m calling the WriteFullEndElement method on
my elements that are supposed to be empty however it is still creating a self
closing tag. My code is posted below.

Thanks,
Scott


//build xml document
XmlTextWriter xw = new XmlTextWriter(docFullName, Encoding.UTF8);

xw.WriteStartDocument();
xw.WriteStartElement(app.XmlRootName);
xw.WriteAttributeString("version", DateTime.Now.ToShortDateString());

//get application translations
DataTable translations =
ApplicationController.GetTranslations(ApplicationID);
int currentLanguageID = 0;
int languageID;
string languageName;
string languageCode;
string resourceCode;
string translation;
bool isFirstLanguageElement = true;
bool isEmpty;
int counter = 0;

foreach (DataRow t in translations.Rows)
{
languageID = (int)t["LanguageID"];
languageName = t["LanguageName"].ToString();
languageCode = t["LanguageCode"].ToString();
resourceCode = t["ResourceCode"].ToString();
translation = t["Translation"].ToString();
isEmpty = (bool)t["IsEmpty"];

if (currentLanguageID != languageID)
{
if (isFirstLanguageElement)
{
currentLanguageID = languageID;

xw.WriteStartElement("language");

if (app.XmlLanguageElementIdType.ToLower() == "name")
{
xw.WriteAttributeString("name", languageName);
}
else if (app.XmlLanguageElementIdType.ToLower() == "code")
{
xw.WriteAttributeString("code", languageCode);
}

isFirstLanguageElement = false;
}
else
{
xw.WriteEndElement();

currentLanguageID = languageID;
xw.WriteStartElement("language");

if (app.XmlLanguageElementIdType.ToLower() == "name")
{
xw.WriteAttributeString("name", languageName);
}
else if (app.XmlLanguageElementIdType.ToLower() == "code")
{
xw.WriteAttributeString("code", languageCode);
}
}
}

xw.WriteStartElement(app.XmlTranslationElementName);
xw.WriteAttributeString("id", resourceCode);

if (isEmpty)
{
xw.WriteString("");
xw.WriteFullEndElement();
}
else
{
xw.WriteString(translation);
xw.WriteEndElement();
}

counter += 1;
if (counter == translations.Rows.Count)
xw.WriteEndElement();
}

xw.WriteEndElement();
xw.Close();

On Thursday, January 21, 2010 11:59 AM
Steve Eckhart wrote:

WriteFullEndElement Doesn't Write Closing Tag
I'm having the same problem. Did you ever find a solution?


Submitted via EggHeadCafe - Software Developer Portal of Choice
Office 2007 Beta now Available
http://www.eggheadcafe.com/tutorials/aspnet/f8b0012b-b03e-4faa-9e3e-d34dfe6d0471/office-2007-beta-now-avai.aspx