Comment puis-je supprimer les espaces de noms xml, à l'aide de java dom?
J'ai le code suivant
DocumentBuilderFactory dbFactory_ = DocumentBuilderFactory.newInstance();
Document doc_;
DocumentBuilder dBuilder = dbFactory_.newDocumentBuilder();
StringReader reader = new StringReader(s);
InputSource inputSource = new InputSource(reader);
doc_ = dBuilder.parse(inputSource);
doc_.getDocumentElement().normalize();
Alors je peux le faire
doc_.getDocumentElement();
et d'obtenir mon premier élément, mais le problème est qu'au lieu d'être job
l'élément est tns:job
.
Je connais et qui ont essayé d'utiliser:
dbFactory_.setNamespaceAware(true);
mais c'est juste pas ce que je cherche, j'ai besoin de quelque chose de complètement se débarrasser des espaces de noms.
Toute aide serait appréciée,
Merci,
Josh
Pourquoi voulez-vous vous débarrasser des espaces de noms, au lieu de composer avec eux?
J'ai un code existant qui ne les supporte pas.
Si c'est l'héritage POS, peut-être juste utiliser la force brute de décapage de préfixes d'espace de noms; même quelque chose d'aussi simple que les regexp serait de travailler. Ce n'est pas la bonne façon en général, mais parfois de la merde doit être combattu avec la merde. 🙂
J'ai un code existant qui ne les supporte pas.
Si c'est l'héritage POS, peut-être juste utiliser la force brute de décapage de préfixes d'espace de noms; même quelque chose d'aussi simple que les regexp serait de travailler. Ce n'est pas la bonne façon en général, mais parfois de la merde doit être combattu avec la merde. 🙂
OriginalL'auteur Grammin | 2011-01-11
Vous devez vous connecter pour publier un commentaire.
Pour des éléments et des attributs des nœuds:
vous donnera la partie locale du nom du noeud.
Voir Nœud.getLocalName()
Comme Anon et Tomalak l'avez mentionné, vous ne voulez vraiment pas à la bande de noms infos de votre XML. C'est une bonne solution pour votre cas particulier, mais je laisse l'espace de noms d'info intacte.
OriginalL'auteur robert_x44
Utiliser la fonction Regex. Cela permettra de résoudre cette question:
Je suis d'accord avec vous, mais je n'ai pas trouvé une meilleure solution ...
XSLT est une meilleure solution. Il utilise le langage XML XML processus.
OriginalL'auteur Habeeb
Plutôt que
Utilisation
Bien que je suis d'accord avec Tomalak: en général, les espaces de noms sont plus utiles que nuisibles. Pourquoi ne voulez-vous de les utiliser?
Edit: cette réponse ne répond pas à l'OP de la question, qui était de savoir comment se débarrasser de l'espace de noms préfixes. RD01 donné la bonne réponse.
Yep, c'était ça
OriginalL'auteur Anon
Vous peut pré-traiter le XML pour supprimer tous les espaces de noms, si vous devez absolument le faire. Je le recommande contre elle, comme la suppression des espaces de noms à partir d'un document XML est essentiellement comparable à la suppression des espaces de noms à partir d'un cadre de programmation ou à la bibliothèque - vous le risque de collisions de noms et de perdre la capacité de différencier entre une fois-éléments distincts. Cependant, il est de votre enterrement. 😉
Cette transformation XSLT supprime tous les espaces de noms à partir de n'importe quel document XML.
L'appliquer à votre document XML. Java exemples pour faire une telle chose devrait être beaucoup, même sur ce site. Le document qui en résulte sera exactement de la même structure et la mise en page, juste sans les espaces de noms.
OriginalL'auteur Tomalak
OriginalL'auteur Kermit
Tomalak, un correctif de votre XSLT (dans le 3ème modèle):
OriginalL'auteur dzav
La taille de l'entrée xml doit également être considéré lors du choix de la solution. Pour les grandes xmls, de la taille de ~100k, possible si votre entrée est à partir d'un service web, vous devez également tenir compte de la collecte des ordures implications lorsque vous manipulez une grande chaîne. Nous avons utilisé de la Chaîne.replaceAll avant, et il a provoqué fréquentes OOM dans la production de 1,5 G de la taille du segment en raison de la façon replaceAll est mis en œuvre.
Vous pouvez référencer http://app-inf.blogspot.com/2013/04/pitfalls-of-handling-large-string.html pour nos résultats.
Je ne suis pas sûr de savoir comment XSLT traite des grands objets de Chaîne, mais nous avons terminé l'analyse de la chaîne à la main pour enlever les préfixes dans un parser pour éviter de créer d'autres grandes des objets java.
OriginalL'auteur user1738754
Au lieu d'utiliser TransformerFactory et puis l'appel de transformation (qui a été l'injection de l'espace de noms vide, j'ai transformé comme suit:
OriginalL'auteur Sulaiman Karmali