Domanda

Sto utilizzando il back-end Java per creare una stringa XML che viene passata al browser.Attualmente sto utilizzando una semplice manipolazione di stringhe per produrre questo XML.È essenziale utilizzare una libreria XML in Java per produrre la stringa XML?Trovo le librerie molto difficili da usare rispetto a ciò di cui ho bisogno.

È stato utile?

Soluzione

Non è essenziale, ma consigliabile.Tuttavia, se la manipolazione delle stringhe funziona per te, allora provaci!Esistono molti casi in cui è possibile creare a mano in modo sicuro testo XML piccolo o semplice.

Tieni solo presente che creare testo XML è più difficile di quanto sembri.Ecco alcuni criteri che prenderei in considerazione:

  • Primo:Quanto controllo hai informazioni sulle informazioni che vanno nell'xml?

Meno controllo hai sui dati di origine, più è probabile che avrai problemi e più vantaggiosa diventa la libreria.Per esempio:(a) Puoi garanzia che i nomi degli elementi non avranno mai un carattere illegale in un nome?(b) Che ne dici delle virgolette nel contenuto di un attributo?Possono accadere e li stai gestendo?(c) I dati contengono mai qualcosa che potrebbe dover essere codificato come file an entità (come il minore di che spesso deve essere restituito come <);lo stai facendo correttamente?

  • In secondo luogo, manutenibilità:è il codice che costruisce l'XML di facile comprensione da qualcun altro?

Probabilmente non vorrai rimanere bloccato con il codice per tutta la vita.Ho lavorato con codice C++ di seconda mano che crea manualmente XML e può essere sorprendentemente oscuro.Naturalmente, se questo è un tuo progetto personale, non devi preoccuparti degli "altri":sostituire "tra un anno" con "altri" sopra.

Non mi preoccuperei delle prestazioni.Se il tuo XML è abbastanza semplice da poterlo scrivere a mano, qualsiasi sovraccarico della libreria è probabilmente privo di significato.Naturalmente, il tuo caso potrebbe essere diverso, ma dovresti prima misurarti per dimostrarlo.

Infine, sì;puoi creare manualmente il testo XML se è abbastanza semplice;ma non conoscere le librerie disponibili lo è probabilmente non è il motivo giusto.

Una moderna libreria XML è uno strumento piuttosto potente, ma può anche essere scoraggiante.Tuttavia, apprendere gli elementi essenziali della libreria XML non è così difficile e può essere piuttosto utile;tra le altre cose, è quasi un requisito nel mercato del lavoro di oggi.Basta non lasciarti impantanare da spazi dei nomi, schemi e altre funzionalità più elaborate finché non ottieni gli elementi essenziali.

Buona fortuna.

Altri suggerimenti

XML è difficile.Analizzare te stesso è una cattiva idea, è ancora un'idea peggiore generare contenuti da solo.Dai un'occhiata alle specifiche Xml 1.1.

Devi occuparti di cose come la codifica corretta, la codifica degli attributi (ad esempio, produce xml non valido), l'escape CDATA corretto, la codifica UTF, le entità DTD personalizzate e questo senza gettare nel mix spazi dei nomi xml con lo spazio dei nomi predefinito/vuoto, attributi dello spazio dei nomi , eccetera.

Impara un kit di strumenti, ce n'è molto disponibile.

Penso che la manipolazione personalizzata delle stringhe vada bene, ma devi tenere a mente due cose:

  1. Il tuo codice non è maturo come la libreria.Dedica del tempo al tuo piano per gestire i bug che compaiono.
  2. Il tuo approccio probabilmente non sarà scalabile come una libreria di terze parti quando l'xml inizierà a crescere (sia in termini di prestazioni che di facilità d'uso).

Conosco una base di codice che utilizza la manipolazione di stringhe personalizzata per l'output xml (e una libreria di terze parti per l'input).All'inizio andava bene, ma dopo un po' è diventata una vera seccatura.

Sì, usa la biblioteca.

Qualcuno si è preso il tempo e gli sforzi per creare qualcosa che di solito è migliore di quello che potresti inventare.La manipolazione delle stringhe serve per rimandare indietro un singolo nodo, ma una volta che inizi a dover manipolare il DOM o utilizzare una query XPath, la libreria ti salverà.

Se non si utilizza una libreria, si rischia di generare o analizzare dati non ben formati, che prima o poi Volere accadere.Per la stessa ragione document.write non è consentito in XHTML, non dovresti scrivere il markup XML come stringa.

SÌ.

Non ha senso tralasciare lo strumento essenziale:anche scrivere xml non è banale dovendo sfuggire a quelle e commerciali e lts, ​​per non parlare dei collegamenti allo spazio dei nomi (se necessario).E alla fine le librerie possono generalmente leggere e scrivere xml non solo in modo più affidabile ma più efficiente (esp.così per Java).

Ma potresti aver cercato strumenti sbagliati, se sembrano troppo complicati.L'associazione dei dati utilizzando JAXB o XStream è semplice;ma per un output XML semplice e diretto, scelgo StaxMate.Può effettivamente semplificare l'attività in molti modi (chiude automaticamente i tag di inizio, scrive dichiarazioni dello spazio dei nomi se necessario, ecc.).

No: se puoi analizzarlo da solo (come stai facendo) e si adatterà alle tue esigenze, non avrai bisogno di alcuna libreria.

Assicurati solo che le tue esigenze future siano soddisfatte: la creazione XML complessa è meglio eseguita utilizzando le librerie, alcune delle quali sono disponibili anche in versioni molto semplici.

L'unica volta che ho fatto qualcosa di simile nel codice di produzione è stato quando un collega e io abbiamo creato un preprocessore in modo da poter incorporare frammenti XML da altri file in un XML più grande.Al caricamento analizzeremo prima questi incorporamenti (riferimenti ai file nelle stringhe di commenti XML) e li sostituiremo con il frammento effettivo a cui fanno riferimento.Quindi passeremo il risultato combinato al parser XML.

Non è necessario utilizzare la libreria per analizzare XML, ma controlla questa domanda
Quali considerazioni dovrebbero essere fatte prima di reinventare la ruota?
prima di iniziare a scrivere il proprio codice per l'analisi/generazione di xml.

No, soprattutto per la generazione (l'analisi sarebbe meno propenso a farlo poiché il testo di input può sempre sorprenderti).Penso che vada bene, ma preparati a passare a una libreria se ti ritrovi a spendere più di qualche minuto per mantenere il tuo codice.

Non penso che usare l'API DOM XML fornita con JDK sia difficile, è facile creare nodi di elementi, attributi, ecc...e successivamente è facile convertire le stringhe in un documento DOM o i documenti DOM in una stringa

Nella prima pagina Google trova dalla Spagna (esempio XML spagnolo):

public String DOM2String(Document doc)
{
    TransformerFactory transformerFactory =TransformerFactory.newInstance();
    Transformer transformer = null;
    try{
        transformer = transformerFactory.newTransformer();
    }catch (javax.xml.transform.TransformerConfigurationException error){
        coderror=123;
        msgerror=error.getMessage();
        return null;
    }

    Source source = new DOMSource(doc);

    StringWriter writer = new StringWriter();
    Result result = new StreamResult(writer);
    try{
        transformer.transform(source,result);
    }catch (javax.xml.transform.TransformerException error){
        coderror=123;
        msgerror=error.getMessage();
        return null;
    }

    String s = writer.toString();
    return s;
}

public Document string2DOM(String s)
{
    Document tmpX=null;
    DocumentBuilder builder = null;
    try{
        builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    }catch(javax.xml.parsers.ParserConfigurationException error){
        coderror=10;
        msgerror="Error crando factory String2DOM "+error.getMessage();
        return null;
    }
    try{
        tmpX=builder.parse(new ByteArrayInputStream(s.getBytes()));
    }catch(org.xml.sax.SAXException error){
        coderror=10;
        msgerror="Error parseo SAX String2DOM "+error.getMessage();
        return null;
    }catch(IOException error){
        coderror=10;
        msgerror="Error generando Bytes String2DOM "+error.getMessage();
        return null;
    }
    return tmpX;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top