Pergunta

Estou usando o back-end Java para criar uma string XML que é passada para o navegador.Atualmente estou usando manipulação simples de strings para produzir este XML.É essencial que eu utilize alguma biblioteca XML em Java para produzir a string XML?Acho as bibliotecas muito difíceis de usar em comparação com o que preciso.

Foi útil?

Solução

Não é essencial, mas aconselhável.No entanto, se a manipulação de strings funcionar para você, vá em frente!Existem muitos casos em que texto XML pequeno ou simples pode ser criado manualmente com segurança.

Esteja ciente de que criar texto XML é mais difícil do que parece.Aqui estão alguns critérios que eu consideraria:

  • Primeiro:quanto ao controle você tem as informações que vão para o xml?

Quanto menos controle você tiver sobre os dados de origem, maior será a probabilidade de você ter problemas e mais vantajosa a biblioteca se tornará.Por exemplo:(a) Você pode garantia que os nomes dos elementos nunca terão um caractere ilegal em um nome?(b) Que tal aspas no conteúdo de um atributo?Eles podem acontecer e você está lidando com eles?(c) Os dados alguma vez contêm algo que possa precisar ser codificado como um entidade (como o menor que muitas vezes precisa ser exibido como <);você está fazendo isso corretamente?

  • Em segundo lugar, manutenibilidade:é o código que constrói o XML fácil de entender por outra pessoa?

Você provavelmente não quer ficar preso ao código pelo resto da vida.Trabalhei com código C++ de segunda mão que cria XML manualmente e pode ser surpreendentemente obscuro.Claro, se este for um projeto pessoal seu, então você não precisa se preocupar com “outros”:substitua “em um ano” por “outros” acima.

Eu não me preocuparia com desempenho.Se o seu XML for simples o suficiente para que você possa escrevê-lo à mão, qualquer sobrecarga da biblioteca provavelmente não terá sentido.Claro, o seu caso pode ser diferente, mas você deve primeiro medir para provar isso.

Finalmente, sim;você pode criar texto XML manualmente, se for simples o suficiente;mas não conhecer as bibliotecas disponíveis é provavelmente não é o motivo certo.

Uma biblioteca XML moderna é uma ferramenta bastante poderosa, mas também pode ser assustadora.No entanto, aprender o essencial da sua biblioteca XML não é tão difícil e pode ser bastante útil;entre outras coisas, é quase um requisito no mercado de trabalho atual.Apenas não se preocupe com namespaces, esquemas e outros recursos mais sofisticados até obter o essencial.

Boa sorte.

Outras dicas

XML é difícil.Analisar-se é uma má ideia, mas é ainda pior gerar conteúdo você mesmo.Dê uma olhada na especificação XML 1.1.

Você tem que lidar com coisas como codificação adequada, codificação de atributos (por exemplo, produz xml inválido), escape CDATA adequado, codificação UTF, entidades DTD personalizadas e isso sem incluir a mistura de namespaces xml com o namespace padrão/vazio, atributos de namespace , etc.

Aprenda um kit de ferramentas, há muitos disponíveis.

Acho que a manipulação de strings personalizadas é adequada, mas você deve manter duas coisas em mente:

  1. Seu código não é tão maduro quanto a biblioteca.Reserve tempo em seu plano para lidar com os bugs que surgirem.
  2. Sua abordagem provavelmente não será escalonada tão bem quanto uma biblioteca de terceiros quando o xml começar a crescer (tanto em termos de desempenho quanto de facilidade de uso).

Conheço uma base de código que usa manipulação de string personalizada para saída xml (e uma biblioteca de terceiros para entrada).Foi bom no começo, mas se tornou um verdadeiro incômodo depois de um tempo.

Sim, use a biblioteca.

Alguém dedicou tempo e esforço para criar algo que geralmente é melhor do que você poderia imaginar.A manipulação de strings serve para enviar de volta um único nó, mas quando você começar a precisar manipular o DOM ou usar uma consulta XPath, a biblioteca irá salvá-lo.

Ao não usar uma biblioteca, você corre o risco de gerar ou analisar dados que não estão bem formados, que mais cedo ou mais tarde vai acontecer.Pela mesma razão document.write não é permitido em XHTML, você não deve escrever sua marcação XML como uma string.

Sim.

Não faz sentido pular uma ferramenta essencial:até mesmo escrever xml não é trivial, pois precisa escapar desses e comerciais e lts, ​​sem mencionar as ligações de namespace (se necessário).E no final, as bibliotecas geralmente podem ler e escrever xml não apenas de forma mais confiável, mas também mais eficiente (especialmente.então para Java).

Mas você pode estar procurando ferramentas erradas, se elas parecerem complicadas demais.A vinculação de dados usando JAXB ou XStream é simples;mas para uma saída XML simples e direta, eu escolho StaxMate.Na verdade, ele pode simplificar a tarefa de várias maneiras (fecha automaticamente as tags de início, grava declarações de namespace, se necessário, etc.).

Não - se você mesmo puder analisá-lo (como está fazendo) e ele for dimensionado de acordo com suas necessidades, você não precisará de nenhuma biblioteca.

Apenas certifique-se de que suas necessidades futuras serão atendidas - a criação de xml complexos é melhor realizada usando bibliotecas - algumas das quais também vêm em sabores muito simples.

A única vez que fiz algo assim no código de produção foi quando um colega e eu construímos um pré-processador para que pudéssemos incorporar fragmentos XML de outros arquivos em um XML maior.No carregamento, primeiro analisaríamos essas incorporações (referências de arquivo em strings de comentários XML) e as substituiríamos pelo fragmento real que elas referenciaram.Em seguida, passaríamos o resultado combinado para o analisador XML.

Você não precisa usar a biblioteca para analisar XML, mas verifique esta questão
Que considerações devem ser feitas antes de reinventar a roda?
antes de começar a escrever seu próprio código para analisar/gerar xml.

Não - especialmente para gerar (eu estaria menos inclinado a analisar, pois o texto de entrada sempre pode surpreendê-lo).Eu acho que está tudo bem - mas esteja preparado para mudar para uma biblioteca caso você gaste mais do que alguns minutos mantendo seu próprio código.

Não acho que usar a API DOM XML que vem com o JDK seja difícil, é fácil criar nós de elementos, atributos, etc.e mais tarde é fácil converter strings em um documento DOM ou documentos DOM em uma String

Na primeira página o Google encontra da Espanha (exemplo XML em espanhol):

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top