Domanda

Ho lavorato con XML ultimamente. E hanno notato un po 'di un fenomeno (forse non così grande di un affare per il resto del mondo, ma per me è stato). Forse, è me che sono un newb. Ma non dovrebbe più hard coded o numeri magici essere scoppiata in un file di configurazione? Ad esempio,

    string url = "http://www.domain.com/aDocument.xml";        
    XmlDocument feed = new XmlDocument();
    feed.Load(url);

    XmlNode errorsNode = feed.SelectSingleNode("Errors");

    if (errorsNode != null)
    {
        XmlNode error = errorsNode.FirstChild;
        lblError.Text = "Error: " + error.SelectSingleNode("Code").InnerText;
    }

Ecco il documento XML:

  <Errors>
    <Error>
        <Code>AWS.MissingParameters</Code>
        <Message>You are missing an parameter</Message>
    </Error>
 </Errors>

Come vi analizzare questo senza hardcoding "codice" o "messaggio"?

È stato utile?

Soluzione

Lo stesso come vorrei per i numeri. Mi piacerebbe dichiaro costanti di tipo stringa, che hanno il nome dell'elemento da ottenere, e quindi passare che ai metodi sui miei strumenti XML.

Tuttavia, si potrebbe prendere in considerazione la creazione di una rappresentazione oggetto dal documento XML (o schema se lo avete), che avrebbe gestito tutto questo per voi. In questo modo, si può semplicemente caricare il documento XML nel codice, e lo farà il parsing per voi in una rappresentazione dell'oggetto.

Quindi, se i cambiamenti XML, si dovrebbe modificare il codice generato per utilizzare i nuovi nomi di elementi.

Si desidera utilizzare lo strumento XSD.exe per questo.

Altri suggerimenti

Non so se è la migliore , ma ho visto di solito questo genere di cose gestito utilizzando una serie di costanti stringa. Almeno allora, se stai elaborazione lo stesso schema XML in più luoghi, le corde magiche sono tutti definiti in un unico luogo. Mi piacerebbe pensare relegando ad un file di configurazione sarebbe un errore a meno che lo schema cambia frequentemente.

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