Я пытаюсь вставить некоторые узлы XML (плюс дочерние узлы) в преобразованный документ XSLT. У меня XML как строка, и поэтому сначала я передал эту строку и просто распечатал ее. Однако все <
s и >
s были экранированы как <
и >
, поэтому я понял, что анализатор XML будет игнорировать эти и не распознавать строку как узлы XML.C# Передача XML в качестве параметра XSLT
Я попытался сначала записать строку в файл, а затем загрузить ее с помощью функции document(). Однако это привело к ошибке: Resolving of external URIs was prohibited.
Я также понял, что из-за чувствительной природы преобразованных документов это может представлять серьезный риск, так как любой может написать файл с тем, что им нравится в этом месте, и его потенциально можно было бы подобрать и вставлен в выходной XML.
Итак, я попытался передать XML в качестве URI с добавленным data:text/xml
, поскольку функция документа должна анализировать и загружать URI такого типа. Тем не менее, это привело к той же ошибке: Resolving of external URIs was prohibited.
Объект, созданный мной, правильно создается, насколько мне известно. В настройках XsltSettings разрешена функция document(), и я прошел в объекте XmlUrlResolver.
var xslt = new XslCompiledTransform(true);
var resolver = new XmlUrlResolver();
#if DEBUG
xslt.Load(Location, new XsltSettings(true, true), resolver);
#else
xslt.Load(XmlReader.Create(new StringReader(this.Text)), new XsltSettings(true, true), resolver);
#endif
Я в некоторой степени теряю здесь. Действительно, идеальным было бы иметь возможность пройти в строке и сказать процессору преобразования не избежать <
s и >
s. Есть ли способ сделать это?
Относительно «Разрешение внешних URI было запрещено», см. Http://stackoverflow.com/questions/32439036/xslloadexception-resolving-of-external-uris-was-prohibited. Для остальных, пожалуйста, создайте минимальный, самодостаточный код исполняемого кода вместе с ожидаемым результатом. Существует несколько способов получить новые узлы в XML-документе, ['ImportNode()'] (https://msdn.microsoft.com/en-us/library/system.xml.xmldocument.importnode (v = vs.110)) .aspx) является одним из них. Почему это должен быть XSLT? – Tomalak
@ Томалак Я уже видел этот вопрос. Отчасти то, как я попал в ситуацию, в которой я сейчас живу. – Luke
... и другие вещи в моем комментарии? – Tomalak