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());
}
}
}
Я запутался, почему это будет работать. Любое объяснение, чтобы понять это поведение, было бы полезно. – Venu
Если вы удалите узел с индексом i из списка, то следующий узел (первоначально с индексом i + 1) станет новым узлом с индексом i. В вашем коде этот узел не будет тестироваться (поскольку счетчик i будет увеличен за цикл). Отсчет назад устраняет это. Просто отлаживайте пример, чтобы понять это. – wero
Это имеет смысл и хорошее объяснение – Venu