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>
7 Réponses :
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]*<", "><");
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
méthode DocumentBuilderFactory.SetInsetInseLeSeCaceSwhiteSpace () Code> contrôle la création d'espaces. Utilisez ceci avant de créer un DocumentBuilder code>. dbfac.setIgnoringElementContentWhitespace(true);
UPS. Mauvais paramètre. Devrait être vrai code>. 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)
J'ai pu supprimer les espaces / onglets / nouvelles lignes de ma transformation à l'aide de la propriété suivante:
transformer.setOutputProperty(OutputKeys.INDENT, "no");
Ceci est l'expression régulière Lorsque vous l'utilisez dans le code de l'utilisation Java
Cela retirera les espaces entre les balises et maintenir les espaces pour la valeur. P> entrée: p> sortie: p> (?:>) (\ s *) << / code> "(?::>) (\\ s *) <" code> et remplacez par "> <" code> p>
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("( *)<", "<")
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>
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);
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.
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.