todos recorrer nodos nodo modificar los leer desde atributos archivos acceder java xml

modificar - recorrer todos los nodos de un xml java



Obteniendo un valor de atributo en el elemento xml (3)

A continuación se muestra el código para hacerlo en vtd-xml . Básicamente, consulta el XML con el XPath de "/ xml / item / @ name".

import com.ximpleware.*; public class getAttrs{ public static void main(String[] s) throws VTDException{ VTDGen vg = new VTDGen(); if (!vg.parseFile("input.xml",false)) // turn off namespace return; VTDNav vn = vg.getNav(); AutoPilot ap = new AutoPilot(vn); ap.selectXPath("/xml/item/@name"); int i=0; while( (i=ap.evalXPath())!=-1){ System.out.println(" item name is ===>"+vn.toString(i+1)); } } }

Tengo una cadena xml como esta y quiero obtener el valor de atributo de "nombre" en un bucle para cada elemento. ¿Cómo puedo hacer eso? Estoy usando la biblioteca javax.xml.parsers.

<xml> <Item type="ItemHeader" name="Plan Features" id="id_1"/> <Item type="Deductible" name="Deductible" id="a">Calendar Year <Item type="Text" name="Individual" id="b">200</Item> <Item type="Text" name="Family" id="c">350</Item> </Item> <Item lock="|delete|" type="Empty" name="Out-of-Pocket Annual Maximum" id="id_2"> <Item type="Text" name="Individual" id="d">400</Item> <Item type="Currency" name="Individual Out-of-Network" id="id_5">$320.00</Item> <Item type="Text" name="Family" id="e">670</Item> </Item> <Item type="Text" name="Life Time Maximum" id="u">8000</Item> <Item type="Text" name="Coinsurance" id="f">60</Item> <Item type="Text" name="Office Visits" id="g">10</Item> <Item type="Text" name="Routine Physicals" id="h">12</Item> <Item type="Text" name="Preventive Care" id="m"/> <Item type="Text" name="Physician Services" id="i"/> <Item type="Text" name="Emergency Room Services / Urgent Care" id="j"/> <Item type="Text" name="Hospital Admission Services" id="k"/> <Item type="Text" name="Chiropractic" id="n"/> <Item type="Text" name="Prescription Drugs" id="l"/> <Item type="Text" name="Specialty Drugs" id="o"/> <Item type="Currency" name="Custom Field 2" id="id_4">$250.00</Item> <Item type="Boolean" name="Pre Tax Reduction Available" id="t">false</Item> <Item type="Boolean" name="Conversion Privilege" id="p">false</Item> <Item type="ItemHeader" name="Plan Setup" id="id_3"/> <Item type="Termination" name="Benefit Termination Date" id="q">Immediate</Item> <Item type="Determination" name="Premium Redetermination Date" id="r">Not Applicable</Item> <Item type="Participation" name="Participation Requirement" id="s"/> </xml>

Esto es lo que intento hasta ahora

DocumentBuilderFactory dbc = DocumentBuilderFactory.newInstance(); DocumentBuilder dbuilder; try { dbuilder = dbc.newDocumentBuilder(); Document doc = dbuilder.parse(new InputSource(new StringReader(plan.getProvisions()))); NodeList nl = doc.getElementsByTagName("Item"); for(int i = 0 ; i < nl.getLength(); i++){ if(i == row){ Element e = (Element)nl.item(i); description = e.getAttribute("name"); } } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }


Creo que lo tengo. Tengo que usar org.w3c.dom.Element explícitamente. También tenía un campo Elemento diferente.


Qué tal si:

import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class Demo { public static void main(String[] args) throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(new File("input.xml")); NodeList nodeList = document.getElementsByTagName("Item"); for(int x=0,size= nodeList.getLength(); x<size; x++) { System.out.println(nodeList.item(x).getAttributes().getNamedItem("name").getNodeValue()); } } }