обновление: я забыл, что вы используете swig-шаблон. Вот мое предложение:
//backend :
const author = { /* author object */ };
author.keys = Object.keys(author).join(', ');
swig.renderFile('/path/to/template.html',{ author });
, а затем, поместите его в template.htm;
{{ author.subject }}
{{ author.keys }}
{% for element in author %}
<li >
{{element }}
</li>
{% endfor %}
Необходимо будет реализовать пользовательскую логику с помощью xmlreader. xmlreader, не загружает полный XML в память перед использованием его, что означает, что можно считать его из потока и обработать его как таковой.
XMLTextreader, как предполагается, не зависает, поскольку это на основе потоков и просто работает над блоками данных.
Если это зависает, может случиться так выполнением чего-то не так при загрузке файла.
XmlDocument не выполним в этом сценарии, поскольку он попытается высосать тот гигабайт в оперативную память. Я удивлен, что Вы находите, что XmlTextReader является слишком медленным. Вы попробовали что-то как следующее?
using (XmlTextReader rdr = new XmlTextReader("MyBigFile.txt"))
{
// use rdr to advance through the document.
}
Я не очень знаком с этой темой, но afaik, XmlReader-классы должны хорошо работать для Вашей определенной проблемы. Они, в конце концов, оптимизированы для точно этого.
Я был бы точно так же, как для резервного копирования всех, кто продвигает XmlReader со сравнением производительности, которое я нашел:
http://www.nearinfinity.com/blogs/joe_ferner/performance_linq_to_sql_vs.html