Gå til innhold

Anbefalte innlegg

Jeg har satt følgende i web.config:

 

<globalization requestEncoding="iso-8859-1" responseEncoding="iso-8859-1" culture="nb-NO"/>

 

Men likevel når jeg bygger opp et XmlDocument, og returnerer dette fra en WebService, så står det

<?xml version="1.0" encoding="utf-8"?>

 

i responsen. Hvordan får jeg endret dette?

Lenke til kommentar
Videoannonse
Annonse

Du kan lage en XmlDeclaration og legge til:

XmlDocument xmlDoc = new XmlDocument();

XmlDeclaration xmldecl;
xmldecl = xmlDoc.CreateXmlDeclaration("1.0", "ISO-8859-1", null);
xmlDoc.AppendChild(xmldecl);

XmlElement items = xmlDoc.CreateElement("Items");
for(int index=0; index<5; index++) {
items.AppendChild(xmlDoc.CreateElement("Item"));
}
xmlDoc.AppendChild(items);

Lenke til kommentar

Det hjalp ikke stort.

 

xDoc = new XmlDataDocument();

XmlDeclaration xDec = xDoc.CreateXmlDeclaration("1.0", "iso-8859-1", "yes");
xDoc.AppendChild(xDec);

 

I starten her står det fortsatt

 

<?xml version="1.0" encoding="utf-8"?>

 

Standalone-parameteret er ikke der en gang.

Lenke til kommentar

Tenkte det kunne være noe med XmlDataDocument som gjorde noe, men ikke hos meg. Denne koden:

class Program
   {
	   static void Main(string[] args)
	   {
		   XmlDocument xmlDoc = new XmlDataDocument();

		   XmlDeclaration xmldecl;
		   xmldecl = xmlDoc.CreateXmlDeclaration("1.0", "ISO-8859-1", "yes");
		   xmlDoc.AppendChild(xmldecl);

	// Legger til noen elementer for syns skyld.
		   XmlElement items = xmlDoc.CreateElement("Items");
		   for(int index=0; index<5; index++) {
			   items.AppendChild(xmlDoc.CreateElement("Item"));
		   }
		   xmlDoc.AppendChild(items);

		   Console.WriteLine(xmlDoc.OuterXml);
		   Console.ReadLine();
	   }
   }

Gir meg denne outputten (formatert for lesbarhet):

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
  <Items>
   <Item />
   <Item />
   <Item />
   <Item />
   <Item />
  </Items>

Rett encoding og standalone er med. Spørs om det ikke er noe du gjør senere som "retter" det til UTF-8 igjen?

 

Har du noe mer av koden din som går ann å se på?

Lenke til kommentar

Jeg har en klasse, kalt ResponseBuilder:

 

Klikk for å se/fjerne innholdet nedenfor

public class ResponseBuilder
{
private XmlDataDocument xDoc;
XmlNode rootNode;

public ResponseBuilder()
{
	xDoc = new XmlDataDocument();

	XmlDeclaration xDec = xDoc.CreateXmlDeclaration("1.0", "ISO-8859-1", "yes");
	xDoc.AppendChild(xDec);

	rootNode = xDoc.CreateNode(XmlNodeType.Element, "result", null);
	xDoc.AppendChild(rootNode);
}

public void AddNode(string name, string value)
{
	XmlElement elem = xDoc.CreateElement(name.ToLower());
	elem.InnerText = value;
	rootNode.AppendChild(elem);
}

public void AddNodeWithChildren(string name, Dictionary<string, string> children)
{
	XmlElement elem = xDoc.CreateElement(name.ToLower());

	foreach(string names in children.Keys)
	{
		XmlElement elm = xDoc.CreateElement(names.ToLower());
		elm.InnerText = children[names];
		elem.AppendChild(elm);
	}

	rootNode.AppendChild(elem);
}

public XmlDataDocument ResultDocument
{
	get
	{
		return xDoc;
	}
}
}

 

Denne bruker jeg da fra en WebService:

 

[WebMethod]
public XmlDataDocument Test()
{
 ResponseBuilder rb = new ResponseBuilder();
 rb.AddNode("Jalla", "tekst");
 return rb.ResultDucument;
}

 

Det jeg da ser i nettleseren når jeg invoker den er:

 

<?xml version="1.0" encoding="utf-8"?>
<jalla>
 tekst
</jalla

Lenke til kommentar

Det er jo litt spesielt at den skal si "utf-8" når jeg har denne:

 

<globalization requestEncoding="iso-8859-1" responseEncoding="iso-8859-1" culture="nb-NO"/>

 

Men faktisk i den automatiske "dokumentasjonsfilen", så står "utf-8" hardkodet inn på eksemplene.

Lenke til kommentar
  • 4 uker senere...

Nettopp!

 

Så muggsopp er ganske langt ut på feil jorde. Dessuten ER det 3.5. Det som også er litt morsomt er at det er ikke mulig å se det ut ifra syntaxen som er brukt. Det kunne like godt vært 1.1 med samme syntax ^^ Noen som liker å late som om de kan noe :D

Lenke til kommentar

Du kunne brukt duck typing

var xDec = xDoc.CreateXmlDeclaration("1.0", "iso-8859-1", "yes");
xDoc.AppendChild(xDec)

 

Men muggsopp er jo ikke noe bedre selv, dessuten er ikke dette .NET 3.5 men en C# 3.0 feature som funker fint på en .NET 2.0 JIT allikevel.

pwnd.

 

.NET 3.5 er Windows Workflow Foundation, Windows Presentation Foundation, Windows Card Space og LINQ utelukkende.

.NET 3.5 er .NET 2.0 + 1.5 siden det ikke er noen grunnleggende endringer i .NET 3.5 fra 2.0.

 

Manfred har også allerede sagt at det er kritisk at klienten tar imot ISO 8895 og ikke UTF-8, som jeg går utifra har noe med SMS eller noe slikt å gjøre.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...