2010-05-20 2 views
1

Я пытаюсь извлечь n0Y7ezLlIYA8R0K54rEmHaTOraBQVSPDjQaGlQxlGso4jdVN1kRxtcfskEs= используя w3c РОМXML Parser

<html> 
<div id='token' style='display:none;'> 
n0Y7ezLlIYA8R0K54rEmHaTOraBQVSPDjQaGlQxlGso4jdVN1kRxtcfskEs= 
</div> 
</html> 

, но я, кажется, застрял

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
Document doc = builder.parse(con.getInputStream()); 
NodeList list = doc.getElementsByTagName("div"); 

Может кто-то пожалуйста указать мне на некоторые основные уроки, которые помогли бы мне решить мои дилемма. Спасибо.

EDIT:

Хорошо я получил его на работу, но это кажется немного неуклюжим

String token; 
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
Document doc = builder.parse(con.getInputStream()); 
Element root = doc.getDocumentElement(); 
NodeList items = root.getElementsByTagName("html"); 

for(int i = 0; i < items.getLength(); i++) { 

    Message message = new Message(); 
    Node item = items.item(i); 
    NodeList properties = item.getChildNodes(); 

    for(int j = 0; j < properties.getLength(); j++) { 
     Node property = properties.item(j); 
     String name = property.getNodeName(); 

     if(name.equalsIgnoreCase("div")) { 
      token = property.getFirstChild().getNodeValue());      
     } 

    } 

} 

Есть похорошела способ получить маркер?

+2

Как вы застряли? –

+0

Хорошо, я отредактировал его немного – lemon

+0

является DOM единственным вариантом, который вы бы рассмотрели? –

ответ

1
VTDGen vg= new VTDGen(); 

if (vg.parseFile("input.xml",false)){ 
    VTDNav vn = vg.getNav(); 
    vn.toElement(VTDNav.FIRST_CHILD); 
    int i = vn.getText(); 
    if (i!=-1) 
    System.out.println(" text node is "+vn.toString(i)); 

} 
+0

Хорошо, я проверю VTD. – lemon

1

В моем случае ВТД-XML парсер служил лучшим, хотя мои CML документы не так огромны, некоторые примеры кода с использованием VTD-XML приведены ниже. Вы можете ссылаться на приведенные ниже ссылки, которые объясняют, что парсер VTD-XML лучше, чем аналитики SAX, DOM и т. Д., Поскольку они также дали тесты производительности. http://www.codeproject.com/Articles/28237/Programming-XPath-with-VTD-XML http://www.codeproject.com/Articles/24354/VTD-XML-XML-Processing-for-the-Future-Part-II

// Для чтения значений XPath

public String readXpathValue(String dir, String file, String xpath) { 
     String value = null; 
     try{ 

      VTDGen vg = new VTDGen(); 
      int i; 
      AutoPilot ap = new AutoPilot(); 
      ap.selectXPath(xpath); 
      if (vg.parseFile(dir+file, true)) 
      { 
       VTDNav vn = vg.getNav(); 
       ap.bind(vn); 
       //XPath eval returns one node at a time 
       while ((i = ap.evalXPath()) != -1) 
       { 
        value = vn.toString(i); 
       } 
       // ap.resetXPath(); 

      } 
     } 
     catch (Exception e){ 
      System.out.println("Exception Occurred in reading Xpath Value : "+e); 
     } 
     return value; 

    } 

// Для изменения файла XML во время выполнения

public void formCreateXMLRequest(MAMData mamData,Map<String, String> strTobeModified) throws DatatypeConfigurationException, PayPalUserCreationFailedException, ModifyException, TranscodeException, IOException, XPathEvalException, NavException, XPathParseException 
    { 
VTDGen vg = new VTDGen(); 
     if (!vg.parseFile(mamData.getDirectory() + mamData.getBatchRequest(), true)) 
      return; 
     VTDNav vn = vg.getNav(); 
     XMLModifier xm = new XMLModifier(vn); 
     AutoPilot ap = new AutoPilot(vn); 

     Set<String> xpathkeys= strTobeModified.keySet(); 
     for(String xpath : xpathkeys) { 


     ap.selectXPath(xpath); 
     while((ap.evalXPath()) != -1) 
      { 
       int p = vn.getText(); 
       xm.updateToken(p, strTobeModified.get(xpath)); 
      } 

      xm.output(mamData.getDirectory()+mamData.getBatchRequest()); 
     } 
    } 
+0

Я не вижу ответа на этот вопрос. –

+0

Могу ли я узнать, как вы не видите это в качестве ответа, вопрос состоял в том, чтобы получить значение xpath данных, и именно это будет делать мой пример кода. – akshaymani

+0

Вы просто скомпилировали код. Вы не ответили на вопрос*. Код должен быть для демонстрации/примера. Это не сам ответ. Это может быть * часть * ответа. –