9
votes

Comment éliminer les espaces blancs entre les balises dans XML

J'ai créé un document XML à l'aide de Java dans mon application Android. Je dois appeler un service Web dans ma candidature et transmettre ce XML comme argument. Mais mon problème est qu'il a créé un espace blanc entre chaque étiquette dans le XML.

<subscriber> <UserName>miya</UserName> <Password>today</Password> </subscriber>


2 commentaires

Miya Aujourd'hui


On dirait que vous nourrissez votre document XML comme entrée pour une transformation XSLT. Il existe plusieurs façons de traiter avec des nœuds de texte blanche uniquement dans XSLT. S'il vous plaît, retournez et postez votre feuille de style, afin que nous puissions vous aider.


7 Réponses :


18
votes

Bien sûr, cela dépend de votre XML lui-même. Cependant, vous pouvez essayer d'utiliser des expressions régulières.

Par exemple: P>

yourXmlAsString.replaceAll(">[\\s\r\n]*<", "><");


2 commentaires

Lorsque j'utilise l'expression régulière ci-dessus, il affiche une erreur: l'expression régulière inavalide


la regex devrait être "> [\\ s \\ r \\ n] * <" (c'est-à-dire que \ r, \ n doit être aussi répandu



7
votes

méthode DocumentBuilderFactory.SetInsetInseLeSeCaceSwhiteSpace () Code> contrôle la création d'espaces. Utilisez ceci avant de créer un DocumentBuilder code>.

dbfac.setIgnoringElementContentWhitespace(true);


2 commentaires

UPS. Mauvais paramètre. Devrait être vrai . Corrigée.


Est-ce que cela détient lors de l'exportation du document XML ou lors de l'analyse de la chaîne XML? (Dans mon cas, il n'a pas aidé à surmonter les problèmes lors de l'analyse XML et WhitSpace crée des nœuds que je ne veux pas)



4
votes

J'ai pu supprimer les espaces / onglets / nouvelles lignes de ma transformation à l'aide de la propriété suivante:

transformer.setOutputProperty(OutputKeys.INDENT, "no");


0 commentaires

1
votes

Ceci est l'expression régulière (?:>) (\ s *) << / code>

Lorsque vous l'utilisez dans le code de l'utilisation Java "(?::>) (\\ s *) <" et remplacez par "> <" xxx

Cela retirera les espaces entre les balises et maintenir les espaces pour la valeur.

entrée: xxx

sortie: xxx


0 commentaires

0
votes

Aucune des autres réponses n'a travaillé pour moi. Je devais utiliser le code ci-dessous pour supprimer des espaces supplémentaires supplémentaires et de nouvelles lignes.

xmlString.trim().replace("\n", "").replaceAll("( *)<", "<")


0 commentaires

0
votes

Cela a travaillé pour moi, merci. En tant que mise en garde, bien que cela soit réellement utile à mon objectif, j'ai remarqué qu'il peut également supprimer du contenu texte si cela consiste seul em> de blouses. Par exemple, exécuter ce qui suit:

<tag></tag><tag></tag><tag></tag><tag> text </tag>


0 commentaires

0
votes

Vous pouvez créer une copie de tous les nœuds dans un document et couper le nodévalue de chaque noeud s'il existe.

const copyChildrenNodesWithoutWhiteSpace = (document) => {
  const clone = document.cloneNode();

  for (const child of document.childNodes) {
    const childCopy = copyChildrenNodesWithoutWhiteSpace(child);
    clone.appendChild(childCopy);

    if (childCopy.nodeValue) {
      childCopy.nodeValue = childCopy.nodeValue.trim();
    }
  }

  return clone;
};

const result = copyChildrenNodesWithoutWhiteSpace(anyDocument);


1 commentaires

S'il vous plaît ne publiez pas uniquement le code comme réponse, mais fournissez également une explication de votre code et de la manière dont il résout le problème de la question. Les réponses avec une explication sont généralement plus utiles et de meilleure qualité, et sont plus susceptibles d'attirer des upvotes.