Я полагаю, что Вы могли просто использовать, связывают, монтируют обман, в /etc/fstab
:
/path/to/read-write-view /path/to/write-only-view none bind 0 0
Так, Вы могли, вероятно, затем:
chmod a=wx /path/to/write-only-view
chmod a=rwx /path/to/read-write-view
Итак, учитывая, что удаление узлов во время обхода NodeList приведет к обновлению NodeList, чтобы отразить новую реальность, я предполагаю, что мои индексы станут недействителен, и это не сработает.
Таким образом, похоже, решение состоит в том, чтобы отслеживать элементы, которые нужно удалить во время обхода, и удалять их все впоследствии, когда NodeList больше не используется.
NodeList nodes = ...;
Set<Element> targetElements = new HashSet<Element>();
for (int i = 0; i < nodes.getLength(); i++) {
Element e = (Element)nodes.item(i);
if (certain criteria involving Element e) {
targetElements.add(e);
}
}
for (Element e: targetElements) {
e.getParentNode().removeChild(e);
}
Согласно спецификации DOM, результат вызова node.getElementsByTagName ( "...") предполагается "живым", то есть любые изменения, внесенные в дерево DOM, будут отражены в объекте NodeList . Что ж, для соответствующих реализаций, то есть ...
Объекты NodeList и NamedNodeMap в DOM жив; то есть меняется на основная структура документа отражены во всех соответствующих NodeList и Объекты NamedNodeMap.
( Спецификация DOM )
Итак, когда вы изменяете древовидную структуру, соответствующая реализация изменит NodeList , чтобы отразить эти изменения.
Библиотека Practical XML теперь содержит NodeListIterator , который включает в себя NodeList и обеспечивает полную поддержку Iterator (это казалось лучшим выбором, чем публикация кода что мы обсуждали в комментариях). Если вы не хотите использовать полную библиотеку, скопируйте этот единственный класс: http://practicalxml.svn.sourceforge.net/viewvc/practicalxml/trunk/src/main/java/net/sf /practicalxml/util/NodeListIterator.java?revision=125&view=markup inventory