2015-12-12 3 views
0

У меня есть следующий код в Java, и я хочу, чтобы извлечь «01» (идентификатор сегмента) из XML-файлаАтрибут в XML линии

я использую eElement.getElementsByTagName("height").item(0).getTextContent() извлечь высоту, наклон, длина, РНЦ ... но я не могу извлечь идентификатор, и я попробовал функцию getAttribute

Вот мой Java-код

NodeList listSegment = doc.getElementsByTagName("segment_list"); 
for (int count = 0; count< listSegment.getLength(); count++) { 
     Node nodeSegment = listSegment.item(count); 
     if (nodeSegment.getNodeType() == Node.ELEMENT_NODE) { 
      Element eElement = (Element) nodeSegment; 
      System.out.println("Segment id : " + eElement.getAttribute("id")); 
      System.out.println("height : " + eElement.getElementsByTagName("height").item(0).getTextContent().replaceAll("\"", "")); 
     } 
} 

а вот пример моего кода XML

<segment_list> 
    <segment id="01"> 
    <height>100</height> 
    <slope>0</slope> 
    <length>10 Km</length> 
    <rrc>0.01</rrc> 
    <max_velocity>90 Km/h</max_velocity> 
    <min_velocity>0 Km/h</min_velocity> 
    <number_vehicles>30</number_vehicles> 
    </segment> 
</segment_list> 

ответ

0

Вы используете хорошие методы, но не с хорошими параметрами

, потому что ваш атрибут является одним из сегмента, Вы должны выбрать тег сегмента, а не segment_list тегов

NodeList listSegment = doc.getElementsByTagName("segment"); 

Чтобы получить этот атрибут, это нормально:

String id = element.getAttribute("id"); 
+0

Работал очень благодарен! – Joseph

0

В DOM узел является единицей каждого вещества. то есть ELEMENT и ATTRIBUTE являются разными узлами. Когда вы используете doc.getElementByTagName, вы получите только элемент, а не атрибуты.

Вам нужно будет получить родительский элемент.

Вот пример, который поможет вам.

String sml ="<segment_list>" 
      + " <segment id=\"01\">" 
      + "  <height>100</height>" 
      + "  <slope>0</slope>" 
      + "  <length>10 Km</length>" 
      + "  <rrc>0.01</rrc>" 
      + "  <max_velocity>90 Km/h</max_velocity>" 
      + "  <min_velocity>0 Km/h</min_velocity>" 
      + "  <number_vehicles>30</number_vehicles>" 
      + "  </segment>" 
      + "</segment_list>"; 
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
NodeList listSegment = dbf.newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes())).getDocumentElement().getChildNodes();//.getElementsByTagName("segment_list"); 
for (int count = 0; count< listSegment.getLength(); count++) { 

    Node nodeSegment = listSegment.item(count); 
    System.out.println("key: " + nodeSegment.getNodeName()); 
    System.out.println("value: " + nodeSegment.getNodeValue()); 
    NamedNodeMap attr = nodeSegment.getAttributes(); 
    for(int j = 0; j < attr.getLength(); j++){ 
     System.out.println("akey: " + attr.item(j).getNodeName()); 
     System.out.println("aval: " + attr.item(j).getNodeValue()); 
    } 
} 

Выход:

key: segment 
value: null 
akey: id 
aval: 01 

Другое дело, не исключают, атрибут с помощью if (nodeSegment.getNodeType() == Node.ELEMENT_NODE) условия.

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