2013-07-05 2 views
0

Я хочу прочитать следующий файл XML:Чтение XML в Java с XML атрибуты

<RootNode> 
    <Node id="1"> value1 </Node> 
    <Node id="2"> value2 </Node> 
    <Node id="3"> value3 </Node> 
    <Node id="4"> value4 </Node> 
    <Node1 id="1"> value11 </Node1> 
    <Node1 id="2"> value12 </Node2> 
    ... 
</RootNode> 

Теперь в зависимости от идентификатора узла Я хочу, чтобы получить значение. Например, если имя узла Node и id равно 1, то значение должно быть value1, а если имя узла Node1, а id - 2, тогда значение должно быть value12.

Я могу получить элементы с именем Node, используя этот код:

try{ 
    DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
    InputSource is = new InputSource(); 
    is.setCharacterStream(new StringReader(xmlString)); 
    Document doc = db.parse(is); 
    NodeList nodes = doc.getElementsByTagName("Node"); 
} 
catch(Execption e){ 
    e.printStacktrace(); 
} 

Как я могу получить элементы в зависимости от атрибута (id в данном случае)?

ответ

2

Чтобы проверить значение идентификатора первого получить атрибут «ID» Значение

private static String getAttributeValue(final Node node, final String attributeName) { 
    Element element = (Element) node; 
    return element.getAttribute(attributeName); 
} 


По этому пути прохождения узла (имя = «узел») и имя атрибута («ID») к этому методу, это вернет вам значение id атрибута. Теперь у вас есть значение, и у вас есть узел, так что вы можете делать все, что вы хотите :)

Чтобы перебирать список узлов

for (int i = 0; i < nodeList.getLength(); i++) { 
    Node node = nodeList.item(i); 
} 
0

использовать этот код

for (int i = 0; i < nodes.getLength(); i++) { 
     NamedNodeMap parmAttrMap = parmList.item(i).getAttributes(); 
     if ((parmAttrMap.getNamedItem("id") != null)) { 
     //get value of id -- parmAttrMap.getNamedItem("id"); 
    } 
} 
0

XPath может помочь. ..

DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
    InputSource is = new InputSource(); 
    is.setCharacterStream(new StringReader(xmlString)); 
    Document doc = db.parse(is); 
    XPathFactory xPathfactory = XPathFactory.newInstance(); 
    XPath xpath = xPathfactory.newXPath(); 
    XPathExpression expr = xpath.compile("//Node[@id=\"YOUR_VALUE_HERE\"]"); 
    NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 

Заменить YOUR_VALUE_HERE для значения требуемого идентификатора, и итерации по нл

Смежные вопросы