stax - get nœud xml comme une chaîne de caractères
xml ressemble à ceci:
<statements>
<statement account="123">
...stuff...
</statement>
<statement account="456">
...stuff...
</statement>
</statements>
Je suis en utilisant stax pour traiter un "<statement>
" à un moment et je l'ai eu à travailler. J'ai besoin d'obtenir à l'intégralité de la déclaration de nœud comme une chaîne de caractères afin que je puisse créer "123.xml" et "456.xml" ou peut-être même de le charger dans une table de base de données indexée par compte.
à l'aide de cette approche: http://www.devx.com/Java/Article/30298/1954
Je cherche à faire quelque chose comme ceci:
String statementXml = staxXmlReader.getNodeByName("statement");
//load statementXml into database
Quelle est ta question exactement?
OriginalL'auteur Jason | 2010-12-04
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas simplement utiliser xpath pour cela?
Vous pourriez avoir un assez simple xpath pour tous "déclaration " nœuds".
Comme suit:
EDIT #1: Si possible, prendre un coup d'oeil à dom4j. Vous avez pu lire la Corde et obtenir toutes "déclaration" nœuds assez simplement.
EDIT #2: à l'Aide de dom4j, voici comment vous pouvez le faire:
(livre de cuisine)
L'affiche explicitement mentionné StAX, donc je ne pense pas que des pointeurs vers dom4j ou une autre bibliothèque ne aider beaucoup...
Étant donné que l'OP n'a jamais posé une question, la suggestion d'utiliser xPath est aussi bon que n'importe quoi. Peut-être mieux.
OriginalL'auteur javamonkey79
J'ai eu une tâche similaire et même si la question d'origine a plus d'un an, je ne pouvais pas trouver une réponse satisfaisante. Le plus intéressant de la réponse jusqu'à maintenant était Blaise Doughan réponse, mais je ne pouvais pas le faire en cours d'exécution sur le XML, je m'attends (peut-être certains paramètres pour que le sous-jacent de l'analyseur pourrait changer cela?). Ici, le XML, très simplyfied:
Ma solution:
Exemple d'utilisation:
Noter que l'extrait du fragment XML contiendra le complet extrait le contenu du corps, y compris les espaces et les commentaires. Le filtrage de celles sur la demande, ou à faire de la taille de la mémoire tampon paramétrable ont été laissés de côté pour le code concision:
Je reçois la chaîne en tant que <['3.0example.com/']::version>3.0</version> >
Je ne suis pas sûr de comprendre ta question, ce que l'espace? Pouvez-vous donner un exemple?
OriginalL'auteur t0r0X
Vous pouvez utiliser StAX pour cela. Vous avez juste besoin de faire avancer la XMLStreamReader le début de l'élément de l'énoncé. Vérifier l'attribut de compte pour obtenir le nom de fichier. Ensuite, utilisez la javax.xml.transformer des Api pour transformer le StAXSource à un StreamResult l'enveloppant d'un Fichier. Cela permettra de faire progresser la XMLStreamReader et ensuite il suffit de répéter ce processus.
Lorsque j'utilise le code ci-dessus, j'obtiens l'erreur suivante Exception in thread "main" net.sf.saxon.trans.XPathException: org.le w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: Une tentative a été faite pour insérer un nœud où il n'est pas permis. Une Idée?
OriginalL'auteur bdoughan
Stax est un faible niveau d'accès de l'API, et il n'a pas non plus les recherches ou les méthodes d'accès à des contenus de manière récursive. Mais ce que vous essayez de faire? Et pourquoi envisagez-vous de Stax?
Au-delà de l'aide d'un modèle d'arbre (DOM, XOM, JDOM, Dom4j), ce qui serait bien travailler avec XPath, le meilleur choix lorsqu'il s'agit de données est généralement la liaison de données de la bibliothèque comme JAXB. Avec elle, vous pouvez passer Stax ou SAX lecteur et de lui demander de lier des données xml en Java beans et au lieu de vous embêter avec xml processus d'objets Java. C'est souvent plus pratique, et elle est généralement assez rendement.
Seul truc avec de gros fichiers, c'est que vous ne voulez pas lier le tout à la fois, mais plutôt de lier chaque sous-arbre (dans votre cas, une "déclaration" à un moment).
C'est plus facile est fait par itération Stax XmlStreamReader, puis à l'aide de JAXB pour lier.
OriginalL'auteur StaxMan
J'ai cherché sur google et cela semble douloureusement difficile.
donné mon xml je pense que c'est peut-être plus simple:
OriginalL'auteur Jason