2015-06-29 2 views
0

Я пытаюсь удалить nameditem из namednodemap в фрагменте кода. Если я удаляю его, он пропускает некоторые атрибуты, может быть, индекс карты настраивается при удалении элемента.Удаление атрибута nameditem из NamedNodeMap

Любая идея относительно того, как исправить эту проблему?

  NamedNodeMap map = thisNode.getAttributes(); 
      for (int i=0; i < map.getLength(); i++) 
      { 
       String itemName = map.item(i).getNodeName(); 
       String itemValue = map.item(i).getNodeValue(); 
       logger.debug("Attributes [" + itemName + ":" + itemValue + "]"); 
       if (itemName.equals("xmlns:xsd") || itemName.equals("elementFormDefault") || itemName.equals("targetNamespace")) 
       { 
        logger.debug("Keep this attribute[" + itemName + "]"); 
       } 
       else if (itemValue.contains(IDENTIFIER)) 
       { 
        logger.debug("Keep this attribute [" + itemName + ":" + itemValue + "]"); 
       } 
       else //if (removeThis) 
       {      
        // remove these attribute name spaces 
        logger.debug("Remove [" + itemName + "]"); 
        if (itemName.equalsIgnoreCase(itemName)) 
        { 
         //map.removeNamedItem(map.item(i).getNodeName()); 
        } 
       } 
      } 

ответ

0

вы можете попробовать перебор от конца к началу, как это:

for (int i=map.getLength()-1; i>=0; i--) 
+0

Я запутался, почему это будет работать. Любое объяснение, чтобы понять это поведение, было бы полезно. – Venu

+0

Если вы удалите узел с индексом i из списка, то следующий узел (первоначально с индексом i + 1) станет новым узлом с индексом i. В вашем коде этот узел не будет тестироваться (поскольку счетчик i будет увеличен за цикл). Отсчет назад устраняет это. Просто отлаживайте пример, чтобы понять это. – wero

+0

Это имеет смысл и хорошее объяснение – Venu

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