Domanda

Le scrivo un file XML in C # usando XmlWriter. Sono in grado di scrivere gli elementi utilizzando il metodo WriteStartElement() e posso aggiungere attributi a questo elemento utilizzando il metodo WriteAttributeString(). Ma se voglio aggiungere l'attributo usando la notazione punto allora come fare?

<Element Attribute1="Value">
    <Element.Attribute2>       //How can i add attribute in this Notation.
          //Add Value of Attribute2
    </Element.Attribute2>
</Element>

So che posso chiamare WriteStartElement("Element.Attribute") ma io sto cercando un approccio più pulito. C'è un altro modo per fare questo?

Edit1:

Ho un oggetto (diciamo obj) che è gerarchica (in forma di albero), ogni nodo di questo albero sta avendo alcune proprietà che possono contenere ulteriori nodi. e sto salvando questo oggetto in XML. Per questo sto usando XmlWriter. Al runtime I iterare il obj e leggere il tipo di nodo utilizzando GetType (). Nome e passarlo a scrivere una XmlNode e utilizzando GetType().GetProperties() ottengo tutte le proprietà di quel nodo, quindi uso un foreach per passare attraverso la matrice PropertyInfo uno per uno e scrivere il nome del PropertyInfo come attributo, ma nel caso in cui io sto avendo una proprietà che viene assegnato un nodo, ho bisogno di scrivere quanto sopra notazione per questo. Sto cercando un metodo in cui mi limiterò a passare la mia PropertyInfo e l'oggetto e scriverò per me in formato desiderato.

Grazie per qualsiasi aiuto!

Edit2:

Per un nodo particolare ho immobili come altezza e larghezza, come i bambini che è una raccolta e risiede implicitamente nella gerarchia di Xml, e come le risorse che sarà anche avendo alcune proprietà e ciascuno saranno rappresentati da nodi sotto il genitore . Ma mentre il risparmio sarà scritto come:

<Parent.Resources>
    <Resource1 ...../>
    <Resource2 ...../>
</Parent.Resources>

Grazie per l'aiuto!

È stato utile?

Soluzione

Che cosa sarebbe più pulita rispetto WriteStartElement("Element.Attribute")? Esso descrive esattamente quello che stai facendo -. La creazione di un nuovo elemento, con quel nome

Se è sicuramente desidera utilizzare XmlWriter, mi piacerebbe restare con questo approccio. Come dice Henrik, tuttavia, LINQ to XML è in genere un modo più semplice per creare XML, in primo luogo:

XElement element = new XElement("Element",
    new XAttribute("Attribute1", "Value"),
    // This could contain nested elements instead of just a text node
    new XElement("Element.Attribute2", "Second value")
);

EDIT: Ora che hai aggiornato la questione, io ancora non vedo il motivo per cui si desidera utilizzare questo "la notazione punto". Non è implicita nella gerarchia del XML?

Altri suggerimenti

Non esiste una cosa come "la notazione punto". Sembra che tu stia riferendosi a XAML. Al di là di XAML, non esiste una cosa come "dot notation" in XML. È per questo che non sta trovando alcun supporto per esso -. Non esiste

Infine, mi finiscono per utilizzare questo string.Format in questo modo. Qui:

WriteXml(XmlWriter writer, Transform sender)
{
    string elementName = sender.GetType.Name;
    writer.WriteStartElement(elementName);   
    ............................
    ............................
    //and for each property inside a foreach
    writer.WriteStartElement(GetDotElement(elementName, propertyName));
}

private string GetDotElement(string elementName, string propertyName)
{
    return string.Format("{0}.{1}", elementName, propertyName);
}

Grazie per avermi aiutato !!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top