tag recommendation moz metadescription length descriptions description and .net xml xmlwriter

.net - recommendation - seo meta descriptions



¿Podemos obligar a XmlWriter a emitir<my-tag></my-tag> en lugar de<my-tag/>? (8)

Dejando esto aquí por si alguien lo necesita; ya que ninguna de las respuestas anteriores me lo resolvió, o me pareció una exageración.

FileStream fs = new FileStream("file.xml", FileMode.Create); XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; XmlWriter w = XmlWriter.Create(fs, settings); w.WriteStartDocument(); w.WriteStartElement("tag1"); w.WriteStartElement("tag2"); w.WriteAttributeString("attr1", "val1"); w.WriteAttributeString("attr2", "val2"); w.WriteFullEndElement(); w.WriteEndElement(); w.WriteEndDocument(); w.Flush(); fs.Close();

El truco consistió en establecer XmlWriterSettings.Indent = true y agregarlo a XmlWriter .

Editar:

Alternativamente también puedes usar

w.Formatting = Formatting.Indented;

En lugar de agregar un XmlWriterSettings.

Por defecto,

someXmlWriter.WriteElementString("my-tag", someString);

produce <my-tag />

Busqué en la clase XmlWriterSettings las posibles opciones que forzarían al escritor a producir <my-tag></my-tag> lugar, pero no encontré nada.

¿Existe una forma sencilla de obligar a XmlWriter a emitir elementos vacíos con "etiqueta abierta, etiqueta cerrada" en lugar de con la forma de mano corta?

Editar :
¡Sí! Me doy cuenta de que, con respecto a la validez XML, las dos notaciones son equivalentes, válidas y todas ... Sin embargo, estoy trabajando con el código heredado que analiza dicho XML usando Read (), es decir, a nivel de nodo (!) Y las cosas se confunden con Read () -ing cuando está en un nodo vacío ...

Por lo tanto, mi pregunta surge en el contexto de limitar la cantidad de cambios a este código heredado. De hecho, la pregunta se superpone con esta pregunta de SO como se sugiere; Sin embargo, ninguna de las opciones ofrecidas son fácilmente aplicables a mi situación.


Esto funcionó para mí:

writer.WriteStartElement("my-tag"); writer.WriteRaw(someString); writer.WriteFullEndElement();

WriteEndElement sigue auto cerrado la etiqueta


Has intentado algo como ésto:

if (someString.Length > 0) { someXmlWriter.WriteElementString("my-tag", someString); } else { someXmlWriter.WriteStartElement("my-tag"); someXmlWriter.WriteEndElement("my-tag"); }

Tal vez hacer una clase de utilidad con eso como una función miembro.


No hay opciones de configuración para hacer eso en .Net. Son lo mismo y cualquier analizador debería poder manejar XML válido.


Prueba esto:

x.WriteStartElement("my-tag"); //Value of your tag is null If (<"my-tag"> == "") { x.WriteWhitespace(""); }else x.WriteString(my-tag); x.WriteEndElement();


Si recibe el mensaje Extension method can only be declared in non-generic, non-nested static class ya que la palabra se puede resaltar, simplemente cree una clase de extensión como se muestra a continuación:

public static class Extension { public static void WriteFullElementString(this XmlTextWriter writer, string localName, string value) { writer.WriteStartElement(localName); writer.WriteRaw(value); writer.WriteFullEndElement(); } }

Espero que esto resulte útil :-)


Simplemente me encontré con el mismo problema, y ​​aunque parece una especie de pirateo, esto sí funcionó y fue muy discreto con el código existente con el que tenía que trabajar.

private static XElement MakeElementLongHand(this XElement rootElem) { rootElem.Value = " "; rootElem.Value = string.Empty; return rootElem; }


Yo uso el siguiente código:

if (string.IsNullOrEmpty(myStringValue)) { myWriter.WriteStartElement("mytag"); myWriter.WriteFullEndElement(); } else { myWriter.WriteElementString("mytag", myStringValue); }