Domanda

Voglio associare la mia IU a una raccolta di XElements e le loro proprietà su una pagina web. Ipoteticamente, questo potrebbe essere per qualsiasi oggetto che rappresenta un albero XML. Spero che ci possa essere un modo migliore per farlo.

Devo usare una query XPath per estrarre gli elementi della raccolta e i valori degli attributi di ciascuno (in questo caso) XElement? Esiste un tipo di oggetto progettato per facilitare il database nell'XML?

<% foreach(var x in element.Descendants()) 
    {%>
<%= DateTime.Parse(x.Attribute["Time"]).ToShortDate() %>
<% } %>
<%-- excuse me, I just vomited a little in my mouth --%>
È stato utile?

Soluzione

Normalmente utilizzo un "segnaposto" classe con [XmlRoot], [XmlElement], [XmlAttribute] e ho l'xml passato a un deserializer che mi dà un oggetto del tipo di segnaposto. Una volta fatto ciò, l'unica cosa che resta da fare è un po 'di DataBinding di base a un oggetto fortemente tipizzato.

Ecco una classe di esempio che è " Xml abilitato " ;:

[XmlRoot(ElementName = "Car", IsNullable = false, Namespace="")]
public class Car
{
    [XmlAttribute(AttributeName = "Model")]
    public string Model { get; set; }
    [XmlAttribute(AttributeName = "Make")]
    public string Make { get; set ;}
}

Ed ecco come deserializzarlo correttamente da un file:

public Car ReadXml(string fileLocation)
{
    XmlSerializer carXml = new XmlSerializer(typeof(Car));

    FileStream fs = File.OpenRead(fileLocation);
    Car result = imageConfig.Deserialize(fs) as Car;

    return result;
}

Naturalmente, è possibile sostituire il FileStream con un MemoryStream per leggere l'Xml direttamente dalla memoria.

Una volta nell'Html, si tradurrebbe in qualcosa del genere:

<!-- It is assumed that MyCar is a public property of the current page. -->
<div>
   Car Model : <%= MyCar.Model %> <br/>
   Car Make : <%= MyCar.Make %>
</div>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top