В то время как SimpleXML обеспечивает способ удалить узлы XML, его возможности модификации несколько ограничены. Еще одно решение состоит в том, чтобы обратиться к использованию расширение DOM. dom_import_simplexml () поможет Вам с преобразованием Вашего SimpleXMLElement
в DOMElement
.
Просто некоторый пример кода (протестированный с PHP 5.2.5):
$data='
';
$doc=new SimpleXMLElement($data);
foreach($doc->seg as $seg)
{
if($seg['id'] == 'A12') {
$dom=dom_import_simplexml($seg);
$dom->parentNode->removeChild($dom);
}
}
echo $doc->asXml();
выводы
Между прочим: выбор определенных узлов намного более прост при использовании XPath ( SimpleXMLElement-> xpath):
$segs=$doc->xpath('//seq[@id="A12"]');
if (count($segs)>=1) {
$seg=$segs[0];
}
// same deletion procedure as above
Попробуйте отключить автоматическую фиксацию:
// make sure autocommit is off
connection.setAutoCommit(false);
st = connection.createStatement();
st.setFetchSize(1000);
System.out.println("start query ");
rs = st.executeQuery(queryString);
System.out.println("done query");
Это будет зависеть от вашего драйвера. Из документации:
Дает драйверу JDBC подсказку относительно количество строк, которые должны быть извлечены из базы данных, когда больше строк необходимо. Количество указанных строк влияет только на наборы результатов, созданные с использованием это утверждение. Если указанное значение равен нулю, то подсказка игнорируется. В значение по умолчанию равно 0.
Обратите внимание, что там написано «подсказка» - я бы понял, что это означает, что драйвер может игнорировать подсказку, если действительно хочет ... и похоже, что это происходит.
Эти два запроса выполняют совершенно разные функции.
Использование предложения LIMIT
ограничивает размер набора результатов до 10000, а установка размера выборки не делает этого. вместо этого дает подсказку драйверу, говорящую, сколько строк нужно извлекать за раз при итерации по набору результатов , который включает все 800k строк.
Поэтому при использовании setFetchSize
база данных создает полный набор результатов, поэтому это занимает так много времени.
Отредактируйте для ясности: Установка размера выборки ничего не даст, если вы не перебираете результат (см. Комментарий Джона), но создание гораздо меньшего набора результатов с помощью LIMIT имеет большое значение.