То, что вы описываете, называется разговорным языком Comet . Комета описывает группу методов для продвижения контента на веб-страницу с постоянным HTTP-соединением.
Пуск будет инициирован с использованием комбинации триггера / хранимой процедуры на сервере базы данных. Таким образом, это происходит независимо от того, откуда происходит обновление данных.
Попробуйте выполнить
XMLReader xr = new XMLFilterImpl(XMLReaderFactory.createXMLReader()) {
private boolean skip;
@Override
public void startElement(String uri, String localName, String qName, Attributes atts)
throws SAXException {
if (qName.equals("rule")) {
if (atts.getValue("id").equals("1")) {
skip = true;
} else {
super.startElement(uri, localName, qName, atts);
skip = false;
}
} else {
if (!skip) {
super.startElement(uri, localName, qName, atts);
}
}
}
public void endElement(String uri, String localName, String qName) throws SAXException {
if (!skip) {
super.endElement(uri, localName, qName);
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (!skip) {
super.characters(ch, start, length);
}
}
};
Source src = new SAXSource(xr, new InputSource("test.xml"));
Result res = new StreamResult(System.out);
TransformerFactory.newInstance().newTransformer().transform(src, res);
выход
<?xml version="1.0" encoding="UTF-8"?><ruleset>
<rule id="2">
<condition>
<case2>somefunctionality</case2>
<allow>false</allow>
</condition>
</rule>
</ruleset>
Что нужно построить, это буфер событий SAX.
, когда вы приходите, активируете элемент <rule>
, вам нужно сохранить его (или информацию, необходимую для его восстановления), и все другое событие, которое происходит между ним и вашим «случаем», которое вы хотите Удалить.
Если сохраненное вами «правило» совпадает с тем, которое нужно удалить, просто выбросьте информацию и продолжайте.
Если сохраненное вами «правило» а не тот, который нужно удалить, вы должны восстановить события sax, которые были сохранены, и продолжить.
SAX чаще всего используется для чтения / разбора XML. Но есть статья о том, как использовать SAX для записи файлов. И, похоже, эта глава доступна в Интернете - см.
http://xmlwriter.net/sample_chapters/Professional_XML/31100604.shtml
[Статья датируется 1999 годом, поэтому используется старая версия SAX, но концепции все еще применяются]
Основная идея заключается в создании пользовательского DocumentHandler / ContentHandler. Всякий раз, когда он получает событие SAX, он сериализует и записывает событие в поток / файл / независимо. Таким образом, вы используете свой входной документ в качестве источника событий sax и пересылаете эти события в XMLOutputter.
Жесткая часть доходит до того, что вы можете анализировать XML-документ в потоке событий SAX, управлять XMLOutputter и генерировать точную копию входного файла. Как только вы начнете работать, вы можете перейти к логике редактирования, где вы читаете свои правила и используете их для изменения выходного файла.
Это намного больше, чем DOM, JDOM, XSLT и т. Д., Но это может помогите в вашей ситуации, потому что вам никогда не нужно хранить весь документ в памяти.