Comment analyser un XML ayant des données incluses dans Comment pouvons-nous analyser le XML et obtenir les données incluses dans
CDATA code > ??? P>
5 Réponses :
CDATA code> dit simplement que les données incluses ne doivent pas être échappées. Donc, prenez simplement le texte de la balise. L'analyseur XML doit renvoyer les données claires sans
CDATA code>. p>
Obtenir les données de texte: e.getTextContent ();
public static void main(String[] args) throws Exception { File file = new File("data.xml"); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); //if you are using this code for blackberry xml parsing builder.setCoalescing(true); Document doc = builder.parse(file); NodeList nodes = doc.getElementsByTagName("topic"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList title = element.getElementsByTagName("title"); Element line = (Element) title.item(0); System.out.println("Title: " + getCharacterDataFromElement(line)); } } public static String getCharacterDataFromElement(Element e) { Node child = e.getFirstChild(); if (child instanceof CharacterData) { CharacterData cd = (CharacterData) child; return cd.getData(); } return ""; } ( http://www.java2s.com/Code/Java/XML/GetcharacterdataCDATAfromxmldocument.htm )
Je préférerais faire quelque chose comme: si (enfant! = Null && (instance d'enfant de caractères de caractères)) {retour ((caractère) enfant) .getData (); } else {retour e.getnodevalue (); } Afin de gérer de manière transparente la présence / l'absence de bloc CDATA.
Pouvez-vous s'il vous plaît fournir un texte pour décrire ce que vous faites et pourquoi vous utiliseriez le DocumentBuilderFactory code>?
Dans la mise en œuvre actuelle de Java Dom, vous pouvez accéder à CDATA simplement comme des données de texte à l'aide de e.gettextContent () code>. Voir exemple sans vérification de type, couler,
e.getdata () code>.
ici r.get (). getresponsebody () code> est le corps de réponse
Puisque toutes les réponses précédentes utilisent un Dom basé approcher. C'est comment analyser CDATA avec une approche basée sur des flux utilisant Stax < / a>. Utilisez le motif suivant: p> échantillon complet: p> avec / path / toyour / exemple .xml p> donne: p>
ci-dessous est l'exemple de fichier XML et le code pour extraire le XML incorporé dans le CDATA dans le XML principal.
public String getSubDocument(Document rootDocument, String xPathString) throws Exception { XPath xPath = XPathFactory.newInstance().newXPath(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document rootDoc = builder.newDocument(); String xmlString = (String)xPath.compile(xPathString).evaluate(rootDocument, XPathConstants.String); return xmlString; }
Avez-vous analyser le fichier "à la main" ou utilisez-vous une classe XMLreader (et laquelle)?