Предотвратите загрузку DTD при использовании XSLT т.е. Преобразователя XML

Для получения копии используйте клон (или дубликат для направляющих 3.1) метод:

# rails < 3.1
new_record = old_record.clone

#rails >= 3.1
new_record = old_record.dup

Тогда можно измениться, какой бы ни поля Вы хотите.

ActiveRecord переопределяет встроенный Object#clone, чтобы дать Вам новое (не сохраненный к DB) запись с неприсвоенным идентификатором.
Примечание, что это не копирует ассоциации, таким образом, необходимо будет сделать это вручную, если Вы должны.

направляющие 3,1 клона являются мелкой копией, используйте дубликат вместо этого...

8
задан robcast 7 July 2009 в 09:50
поделиться

1 ответ

(Я отвечаю на свой вопрос здесь, чтобы спасти себя в следующий раз или кого-либо еще, дни возни, которые мне понадобились, чтобы найти ответ.)

Что действительно нужно, чтобы изменить способ разрешения DTD, так это EntityResolver . К сожалению, невозможно настроить EntityResolver , который будет использоваться Transformer . Таким образом, вы должны сначала создать XMLReader с CatalogResolver в качестве EntityResolver :

SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(true);
XMLReader r = spf.newSAXParser().getXMLReader();
EntityResolver er = new CatalogResolver();
r.setEntityResolver(er);

и использовать его для Transformer :

SAXSource s = new SAXSource(r, xmlSrc);
Result res = new SAXResult(myDefaultHandler());
transformer.transform(s, res);
11
ответ дан 5 December 2019 в 11:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: