2016-12-09 2 views
0

У меня есть этот XML:Сравните предыдущий атрибут XML с током в Java

<note> 
     <text style="italic">Lorem ipsum dolor sit amet</text> 
     <text style="italic">consectetur adipisicing elit, </text> 
     <text>sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</text> 
     <text style="bold">Ut enim ad minim veniam, quis nostrud exercitation</text> 
     <text>ullamco</text> 
</note> 

Вот моя проблема:

Я хочу, чтобы цикл через XML и сравнить атрибуты с предыдущим атрибутом, чтобы увидеть, если они одинаковы. Если они одинаковы, я ничего не хочу делать. Если они не совпадают, я хочу сохранить значение атрибута (курсив, полужирный и т. Д.) В ArrayList.

Вот мой код:

List<String> styles = new ArrayList<String>(); 
List<Node> textNodesXML = new ArrayList<Node>(); 
textNodesXML = xpath.getNodes("/note/text"); 

for (Node n : textNodesXML) 
{ 
    Node attribute = n.getAttributes().getNamedItem("style"); 
    Node nextSibling = getTheNextSibling(n); 
    Node siblingAttribute= nextSibling .getAttributes().getNamedItem("style"); 

    //Code is working up until here. 

    if (attribut != null && siblingAttribute.getNodeValue() != attribute.getNodeName()) 
    { 
     styles.add(attribute.getTextContent()); 
    } 
} 


public static Element getTheNextSibling(Node node) 
    { 
     Node sibling = node.getNextSibling(); 
     while (sibling != null) 
     { 
     if (sibling.getNodeType() == Node.ELEMENT_NODE) 
     { 
      return (Element) sibling; 
     } 
     sibling = sibling.getNextSibling(); 
     } 
     return null; 
    } 

Я хочу, чтобы это земля в моих стилях ArrayList:

italic 
bold 

Большое спасибо

+0

Легче использовать 'HashMap' для проверки. Вы хотите проверить только атрибут предыдущего элемента или всех атрибутов, которые были ранее? – Stefan

+0

Только предыдущий атрибут. Как я могу использовать HashMap? – chichi

+0

Что произойдет, если у вас есть 4 элемента, которые чередуются с одним и тем же атрибутом? Например: курсив, ничего, курсив, ничего? Ваше сравнение добавит 2 курсива в 'ArrayList'. Это желаемое поведение? – Stefan

ответ

0

Просто сравните текущее значение стиля с последней в перечне:

Вместо

styles.add(attribute.getTextContent()); 

сделать

if (styles.isEmpty() || !styles.get(styles.size() - 1).equals(attribute.getTextContent())) { 
    styles.add(attribute.getTextContent()); 
} 
Смежные вопросы