Я бы использовал jSoup для этого. Это действительно парсер HTML, но его можно использовать против XML.
После того, как вы разобрали XML, выбор и удаление с помощью атрибута так просто, как ...
.select('[zip=22222]').remove()
... но вот полный пример, используя jSoup 1.7.2 (более ранние версии могут имеет немного другой API):
<cfsavecontent variable="XmlText">
<TERMINALS>
<terminal location="some random location" terminal="25" zip="11111" />
<terminal location="some other location" terminal="26" zip="22222" />
<terminal location="some more location" terminal="22" zip="33333" />
</TERMINALS>
</cfsavecontent>
<cfscript>
jSoup = createObject('java','org.jsoup.Jsoup');
Parser = createObject('java','org.jsoup.parser.Parser');
Dom = jSoup.parse(XmlText , '' , Parser.xmlParser());
Dom.select('[zip=22222]').remove();
</cfscript>
<cfdump var=#Dom.outerHtml()# />
для этого кода, чтобы работать, CF должен знать о классах jSoup, поэтому он должен быть в состоянии видеть файл JAR, который может быть достигнут в четырех различных способов:
Вариант 1:
Место jSoup jar в каталоге CF's lib - например. {cf10}/cfusion/webroot/WEB-INF/lib
или {cf9}/webroot/WEB-INF/lib
- и перезапустить CF. More info.
Вариант 2:
Поместите банку jSoup в локальном каталоге и установки This.JavaSettings
in Application.cfc - эта функция была добавлена в CF 10 и Railo 4.0
Вариант 3:
Поместите jSoup банку в локальный каталог и используйте JavaLoader, чтобы загрузить его (как описано выше, но работает с любой версией).
Две линии CREATEOBJECT выше, то следует заменить:
jl = new javaloader.JavaLoader([expandPath('./jsoup-1.7.2.jar')]);
jSoup = jl.create('org.jsoup.Jsoup');
Parser = jl.create('org.jsoup.parser.Parser');
(предполагается, что файл фляги находится в той же директории, что и скрипт)
Вариант 4:
Для Railo и OpenBD, то выше будут работать, или вы можете просто ссылаться на путь к JAR-файлу в качестве третьего аргумента для вызовов createObject.
Ох, не знал, что Railo сделал это! Спасибо за тангенциальный наконечник. –
Когда я пытаюсь выполнить второй вариант загрузки файла jar, я получаю сообщение об ошибке «Каталог или файл ./lib/, указанный в LOADPATHS, не существует» ... – froadie
Я предполагаю, что каталог существует? Попробуйте expandPath? Может потребоваться перезапуск CF тоже. –