9
votes

Comment analyser XML pour

Comment analyser un XML ayant des données incluses dans Comment pouvons-nous analyser le XML et obtenir les données incluses dans CDATA ???


1 commentaires

Avez-vous analyser le fichier "à la main" ou utilisez-vous une classe XMLreader (et laquelle)?


5 Réponses :


2
votes

CDATA 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 .


1 commentaires

Obtenir les données de texte: e.getTextContent ();



9
votes
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 )

3 commentaires

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 ?


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 () . Voir exemple sans vérification de type, couler, e.getdata () .



0
votes

ici r.get (). getresponsebody () est le corps de réponse xxx


0 commentaires

2
votes

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: xxx

échantillon complet: xxx

avec / path / toyour / exemple .xml xxx

donne: xxx


0 commentaires

0
votes

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;
}


0 commentaires