public void AllowsPhtmlAttributes(string html) { var ctx = new PortableHtmlContext(); var result = PortableHtmlSchema.Validate(html, ctx); Assert.AreEqual(PortableHtmlSchemaErorr.None, result.SchemaError); }
public void CoverToString() { var ctx = new PortableHtmlContext { Strategy = PortableHtmlVerificationStrategy.Full, Level = PortableHtmlStrictLevel.AllowLists, BaseUri = new Uri("http://ya.ru/x") }; ctx.TrustedHosts.Add("me.com"); ctx.TrustedHosts.Add("you.com"); const string html = "<!--x--><DIV a='1'><p/><a href='javascript:hack()'/></DIV>"; ctx = PortableHtmlSchema.Validate(html, ctx); var result = ctx.ToString(); Console.WriteLine(result); Assert.AreEqual(@"Level : AllowLists Strategy : Full IsOk : False SchemaError : InvalidRootTag, CommentsDetected, RootInline, UnknownAttribute, EmptyElement, UpperCaseDetected, DangerousLink BaseUri : 'http://ya.ru/x' Trust : 'me.com' Trust : 'you.com' CommentsDetected 0:0/ InvalidRootTag 1:10/./ UnknownAttribute 1:10/.//@a UpperCaseDetected 1:10/./ EmptyElement 1:21/./p[1] EmptyElement 1:25/./a[1] DangerousLink 1:25/./a[1] RootInline 1:25/./a[1] ", result); }
public void DisableUnknownAttributesByDefault(string html) { var ctx = new PortableHtmlContext(); var result = PortableHtmlSchema.Validate(html, ctx); Assert.AreEqual(PortableHtmlSchemaErorr.UnknownAttribute, result.SchemaError); }
public void AllowUnknownAttributesWithOption(string html) { var ctx = new PortableHtmlContext { Level = PortableHtmlStrictLevel.AllowUnknownAttributes }; var result = PortableHtmlSchema.Validate(html, ctx); Assert.AreEqual(PortableHtmlSchemaErorr.None, result.SchemaError); }
public void InlineNodesDirectlyUnderContainersAreNotAllowed(string html) { var ctx = new PortableHtmlContext { Level = PortableHtmlStrictLevel.AllowExtensions }; var result = PortableHtmlSchema.Validate(html, ctx); Assert.AreEqual(PortableHtmlSchemaErorr.InlineInNonTextElement, result.SchemaError); }
public void TablesInParasNotAllowed(string html) { var ctx = new PortableHtmlContext { Level = PortableHtmlStrictLevel.AllowTables }; var result = PortableHtmlSchema.Validate(html, ctx); Assert.AreEqual(PortableHtmlSchemaErorr.NestedParaElements, result.SchemaError); }
public void Q295_InvalidInlinesInRow() { var xml = XElement.Parse("<div>Бла бла <strong>Сергей</strong>\r\n\r\n\r\n<strong>Иванов</strong></div>"); var ctx = PortableHtmlSchema.Validate(xml, PortableHtmlStrictLevel.TrustAllImages | PortableHtmlStrictLevel.TrustAllLinks); Assert.False(ctx.Ok); var converted = new PortableHtmlConverter().Convert(xml); var x = XElement.Parse("<div><p>Бла бла <strong>Сергей Иванов</strong></p></div>"); Console.WriteLine(x.ToString(SaveOptions.DisableFormatting)); Assert.AreEqual(x.ToString(SaveOptions.DisableFormatting).Replace("\u00A0", " "), converted.ToString(SaveOptions.DisableFormatting).Replace("\u00A0", " ")); }
public void StrategySupport(string html, PortableHtmlVerificationStrategy strategy, int errorcount) { var ctx = new PortableHtmlContext { Strategy = strategy }; var result = PortableHtmlSchema.Validate(html, ctx); Assert.False(result.Ok); foreach (var e in result.Errors) { Console.WriteLine("{0} {1} {2} {3}", e.Error, e.Line, e.Column, e.XPath); } Assert.AreEqual(errorcount, result.Errors.Count); }
public void TableSupport(string html, bool result) { var ctx = new PortableHtmlContext { Level = PortableHtmlStrictLevel.AllowLists | PortableHtmlStrictLevel.AllowTables }; ctx = PortableHtmlSchema.Validate(html, ctx); Console.WriteLine(ctx); if (result) { Assert.True(ctx.Ok); } else { Assert.False(ctx.Ok); } }
public void AllowBrIfOptionChoosed(string html, bool result) { var ctx = new PortableHtmlContext { Level = PortableHtmlStrictLevel.AllowBr }; ctx = PortableHtmlSchema.Validate(html, ctx); Console.WriteLine(ctx); Assert.AreEqual(result, ctx.Ok); if (result) { Assert.AreEqual(PortableHtmlSchemaErorr.None, ctx.SchemaError); } else { Assert.AreNotEqual(PortableHtmlSchemaErorr.None, ctx.SchemaError); } }
public void CoverManyDeprecatedAttributesInRowInDistinctStrategies() { var html = "<div><p a='1' b='2'>x</p><p/></div>"; var ctx = new PortableHtmlContext { Strategy = PortableHtmlVerificationStrategy.Full }; PortableHtmlSchema.Validate(html, ctx); Assert.AreEqual(3, ctx.Errors.Count); ctx = new PortableHtmlContext { Strategy = PortableHtmlVerificationStrategy.ForcedElementResult }; PortableHtmlSchema.Validate(html, ctx); Assert.AreEqual(2, ctx.Errors.Count); ctx = new PortableHtmlContext { Strategy = PortableHtmlVerificationStrategy.ForcedResult }; PortableHtmlSchema.Validate(html, ctx); Assert.AreEqual(1, ctx.Errors.Count); }
public void CoverManyNestErrorsInDistinctStrategies() { var html = "<div><p><p>x<ul>x<li>x</li></ul></p></p></div>"; var ctx = new PortableHtmlContext { Strategy = PortableHtmlVerificationStrategy.Full, Level = PortableHtmlStrictLevel.AllowLists }; PortableHtmlSchema.Validate(html, ctx); Assert.AreEqual(3, ctx.Errors.Count); ctx = new PortableHtmlContext { Strategy = PortableHtmlVerificationStrategy.ForcedElementResult, Level = PortableHtmlStrictLevel.AllowLists }; PortableHtmlSchema.Validate(html, ctx); Assert.AreEqual(2, ctx.Errors.Count); ctx = new PortableHtmlContext { Strategy = PortableHtmlVerificationStrategy.ForcedResult, Level = PortableHtmlStrictLevel.AllowLists }; PortableHtmlSchema.Validate(html, ctx); Assert.AreEqual(1, ctx.Errors.Count); }
private void testSchema(object srcHtml, bool isValid = true, PortableHtmlSchemaErorr error = PortableHtmlSchemaErorr.None, Type exceptionType = null, bool exactState = true) { var result = (srcHtml is string || null == srcHtml)? PortableHtmlSchema.Validate((string)srcHtml):PortableHtmlSchema.Validate((XElement)srcHtml); if (isValid && !result.Ok) { Console.WriteLine(result.SchemaError); } Assert.AreEqual(isValid, result.Ok, "Общий статус валидации неверен"); if (error == PortableHtmlSchemaErorr.None || exactState) { Assert.AreEqual(error, result.SchemaError, "Статус ошибки валидации неверен"); } else { Assert.True(0 != (error & result.SchemaError)); } if (null == exceptionType) { return; } Assert.NotNull(result.Exception, "Ожидалось исключение"); Assert.AreEqual(exceptionType, result.Exception.GetType(), "Исключение имеет неверный тип"); if (PortableHtmlVerificationStrategy.ForcedResult == result.Strategy) { if (!result.Ok) { Assert.AreEqual(1, result.Errors.Count, "Много ошибок для ForceResult"); } } if (PortableHtmlVerificationStrategy.ForcedElementResult == result.Strategy) { if (!result.Ok) { var groupped = result.Errors.GroupBy(_ => _.Element); Assert.True(groupped.All(_ => _.Count() == 1), "Множественные ошибки для элемента при ForceElementResult"); } } }
public void Test(string source, string expected) { var ex = XElement.Parse(expected); Assert.True(PortableHtmlSchema.Validate(ex, PortableHtmlStrictLevel.TrustAllImages | PortableHtmlStrictLevel.TrustAllLinks).Ok); var phtml = _converter.Convert(XElement.Parse(source)); var r = phtml.ToString(); Console.WriteLine("EXPECTED:\n===================="); Console.WriteLine(ex.ToString()); Console.WriteLine("\nRESULT:\n===================="); Console.WriteLine(r); Assert.AreEqual(ex.ToString(SaveOptions.DisableFormatting).Replace("\u00A0", " "), phtml.ToString(SaveOptions.DisableFormatting).Replace("\u00A0", " ")); var ctx = PortableHtmlSchema.Validate(phtml, PortableHtmlStrictLevel.TrustAllImages | PortableHtmlStrictLevel.TrustAllLinks); if (!ctx.Ok) { Console.WriteLine(ctx.ToString()); Assert.Fail("No PHTML"); } }
public void Q345_Invalid_EmptyPara() { var xml = XElement.Parse(@" <div> <div> <div>Курс доллара и евро уже не первый месяц продолжают стремительно расти, создавая в обществе определенное напряжение. Редакция «Устава» выяснила у</div> <div>экспертов их мнение и попросила дать прогноз на ближайшее будущее.</div> <div></div> <div>Виктор Немихин, директор Екатеринбургского филиала брокерского дома «Открытие»:</div> <div>Вячеслав Вегнер, Депутат Екатеринбургской городской Думы от КПРФ:</div> <div></div> <div>Александр Макаров, ООО «Форексклуб-Екатеринбург»:</div> <div></div> <div>Константин Киселев, политолог, заместитель директора по науке Института философии и права УРО РАН</div> <div>Игорь Нестерович, Начальник отдела валютно-финансовых операций банка «Кольцо Урала» :</div> <div></div> <div>Владимир Пронин, управляющий</div> <div>кредитно-кассовым офисом ОАО «БКС Банк», :</div> <div></div> <div>Илья Белоус:</div> <div>Технический анализ график доллар-рубль за последние 11 месяцев</div> </div> <p class=""c2""> <br /> <strong>Курс доллара и евро уже не первый месяц продолжают стремительно расти, создавая в обществе определенное напряжение. Редакция «Устава» выяснила у</strong> <br /> <strong> экспертов их мнение и попросила дать прогноз на ближайшее будущее.</strong> <br /> </p> <p> <br /> <a target=""_blank"" href=""http://ystav.com/wp-content/uploads/2014/12/1339318883_bodborka2_21.jpg""> <br /> <img class=""aligncenter wp-image-920 size-full qlevel-8 qpos-0"" src=""http://ystav.com/wp-content/uploads/2014/12/1339318883_bodborka2_21.jpg"" /> <br /> </a> <br /> </p> <p class=""c3""> <br /> <strong> <br /> <a target=""_blank"" href=""http://ystav.com/wp-content/uploads/2014/12/90.jpg""> <br /> <img class=""wp-image-816 alignnone qlevel-9 qpos-0"" src=""http://ystav.com/wp-content/uploads/2014/12/90.jpg"" /> <br /> </a> <br /> </strong> <br /> </p> <p class=""c3""> <br /> <strong>Виктор Немихин, директор Екатеринбургского филиала брокерского дома «Открытие»:</strong> <br /> </p> <p class=""c4"">«На данный момент никто точно не знает будет или не будет дальше расти курс евро и доллара, просто потому что волатильность на рынке сейчас очень высокая, происходят существенные колебания как в ту, так и в другую сторону.</p> <p class=""c4"">Ситуация с волатильностью продлится еще долгое время. Во-первых, это связно со стоимостью нефти, потому что такую динамику мало кто ожидал, и еще меньше кто понимает. Во-вторых, ЦБ ушел от политики управляемого курса рубля и инфляционного таргетирования. С моей точки зрения это правильный ход , но не в самое удачное время. Рынок должен привыкнуть к новым условиям. Вот сейчас и привыкает.»</p> <p> <br /> <a target=""_blank"" href=""http://ystav.com/wp-content/uploads/2014/12/859507_437164949687421_1809504151_o.jpg""> <br /> <img class=""wp-image-928 size-thumbnail alignnone qlevel-8 qpos-0"" src=""http://ystav.com/wp-content/uploads/2014/12/859507_437164949687421_1809504151_o-150x150.jpg"" /> <br /> </a> <br /> </p> <p class=""c4""> <br /> <strong>Вячеслав Вегнер, Депутат Екатеринбургской городской Думы от КПРФ: </strong> <br /> </p> <p class=""c4"">«Рубль будет ослабевать. В рамках макроэкономики такая ситуация выгодна для балансировки бюджета. А для населения это будет означать подорожание всех услуг, рост стоимости как продуктов питания, так и продукции промышленных предприятий. Мой прогноз рубля против доллара к марту 72-76 руб..»</p> <p> <br /> <strong> <br /> <a target=""_blank"" href=""http://ystav.com/wp-content/uploads/2014/12/makarov_a.jpg""> <br /> <img class=""alignleft wp-image-817 qlevel-9 qpos-0"" src=""http://ystav.com/wp-content/uploads/2014/12/makarov_a.jpg"" /> <br /> </a> <br /> </strong> <br /> </p> <p> <br /> <strong>Александр Макаров, ООО «Форексклуб-Екатеринбург»:</strong> <br /> </p> <p class=""c4"">«Еще 13 января 2014 года ЦБ решил двигаться по курсу плавающего рубля, и постепенно ЦБ стал уменьшать присутствие ликвидности. Плавающий курс это хорошо, на ограниченном появляются спекулянты. И все бы ничего, но в мае-июне начались активные санкции. Спрос на иностранную валюту повысился, а приток денег уменьшился, и большинство инвесторов стали выводить деньги с территории нашей страны. Курс полетел в небеса с космической скоростью, что мы сейчас и видим.</p> <p class=""c4"">Это нечто непрогнозируемое. В настоящий момент никто не знает, где граница сверху. Формально, пока санкции действуют, курс может не остановиться, пределов роста не существует. В этом есть и положительный момент, прогноз по нашей экономике теперь положительной, потому что стало выгодно производить товары у нас. На самом деле это стоило сделать еще в 2008. Еще один важный момент в том, что если все растет медленно, то люди не пугаются. Поэтому сейчас задача ЦБ, чтобы курс менялся более плавно.»</p> <p> <br /> <strong> <br /> <a target=""_blank"" href=""http://ystav.com/wp-content/uploads/2014/12/1914157_100424239975241_4644417_n.jpg""> <br /> <img class=""wp-image-819 alignnone qlevel-9 qpos-0"" src=""http://ystav.com/wp-content/uploads/2014/12/1914157_100424239975241_4644417_n.jpg"" /> <br /> </a> </strong> <br /> </p> <p class=""c4""> <br /> <strong>Константин Киселев, политолог, заместитель директора по науке Института философии и права УРО РАН</strong>:</p> <p class=""c4"">«Курс доллара и евро будет расти. Это будет продолжаться до тех пор, пока Путин у власти.»</p> <p> <br /> <img class=""wp-image-941 alignnone qlevel-7 qpos-0"" src=""http://ystav.com/wp-content/uploads/2014/12/unnamed.jpg"" /> <br /> </p> <p> <br /> <strong>Игорь Нестерович, Начальник отдела валютно-финансовых операций банка «Кольцо Урала» :</strong> <br /> </p> <p class=""c4"">«Прогнозируя ситуацию на рынке, стоит сказать, что на укрепление рубля может повлиять решение по ключевой ставке, которое должно быть принято 11 декабря на Совете Директоров Банка России. Сейчас рынок находится в ожидании этого решения, повышение ключевой ставки поможет рублю стабилизироваться, так как позиции спекулянтов будут обходиться им дороже. Также в поддержку рубля Банк России использует механизм интервенций. За последнюю неделю объем интервенций составил около 4 млрд. долларов США. Это помогло удержать курс доллара США ниже 54 руб»</p> <p> <br /> <strong> <br /> <img class=""wp-image-818 alignnone qlevel-8 qpos-0"" src=""http://ystav.com/wp-content/uploads/2014/12/20380.jpg"" /> <br /> </strong> <br /> </p> <p class=""c4""> <br /> <strong>Владимир Пронин, управляющий </strong> <br /> <strong>кредитно-кассовым офисом ОАО «БКС Банк», :</strong> <br /> </p> <p class=""c4"">«Есть прогноз ЦБ, если его посмотреть, то цена на нефть составляет 3600 рублей за баррель. То есть эту сумму мы делим на курс нефти и получаем рубль. Если курс будет 85 за нефть, то рубль будет 45. Если курс будет 60 за нефть, то рубль будет тоже 60.</p> <p class=""c4"">Дальше ЦБ должен поменять политику, если это, конечно, настоящий ЦБ. Он должен думать не только о своих бюджетных балансах, но и о населении. Если он начнет об этом думать,и у него есть на это ресурсы, то он сможет изменить свою политику, чтобы прийти к сбалансированному курсу рубля. Но 30 рублей за доллар мы не увидим никогда. Курс будет 45-52, так продлится. я думаю, до ближайших выборов точно»</p> <p> <br /> <strong> <br /> <a target=""_blank"" href=""http://ystav.com/wp-content/uploads/2014/12/1512348_675910579191914_6156868296930448263_n.jpg""> <br /> <img class=""size-thumbnail wp-image-930 alignnone qlevel-9 qpos-0"" src=""http://ystav.com/wp-content/uploads/2014/12/1512348_675910579191914_6156868296930448263_n-150x150.jpg"" /> <br /> </a> </strong> <br /> </p> <p class=""c4""> <br /> <strong>Илья Белоус:</strong> <br /> </p> <p class=""c4""> <br /> <span>«Курс рубля к доллару в течение определенного периода времени будет испытывать волатильность. Это связано с тем, что в процессе участвуют очень мощные финансовые потоки: валютная выручка, импорт, внешний долг, вывоз капитала зарубеж, спекулянты, Центробанк РФ, население. Все эти потоки в последнее время сильно изменяются, создавая движения курса. Вероятно, через несколько месяцев возникнет поток от возврата валюты в Россию из-за рубежа ввиду того, что в России вложения окажутся более выгодными и надежными. Многое зависит и от новостного фона. В декабре, как мы ожидаем, новостной фон по-прежнему будет напряженным, некоторое затишье возможно в январе и феврале с возрастанием напряженности ближе к весне. Долгосрочным фактором нестабильности может оказаться период 2016 года, когда в США пройдут выборы президента, а в России – Государственной думы. Запад будет активизировать давление на Россию, чтобы показать населению свою вовлеченность в мировые процессы и подчеркнуть важность США в мире, одновременно снижая внимание к внутренним проблемам, которых скопилось очень много – и в экономике и в гражданском обществе.</span> <br /> <br class="" qlevel-7 qpos-1"" /> <br /> <span>Из всего указанного следует, что декабрь будет плохим для рубля. Возможно, курс рубля будет опускаться до 60 руб./доллар. В январе-феврале курс будет более стабильным и, вероятно, будет находиться в коридоре 50-55 руб./доллар. Ближе к марту, по нашему мнению, будет создана искусственная напряженность в попытке дестабилизировать обстановку в России, в силу чего цены на нефть испытают минимум, а рубль опустится ниже 60 руб./доллар. Однако постепенно низкие цены на нефть начнут приводить к снижению вложений в геологоразведку, в силу чего цены на нефть придется вернуть на уровень не ниже 70 долларов за баррель. Одновременно снизится нагрузка на заемный капитал, и более активно станут возвращаться средства из-за рубежа в рамках законодательства по деофшоризации. Поэтому постепенно курс рубля должен подойти к уровню 50 руб./доллар. Думаю, что летом 2015 года равновесный курс установится вблизи этого значения.</span> <br /> <br class="" qlevel-7 qpos-3"" /> <br /> <span>Дальше все будет зависеть от того, как Россия справится с внешними и внутренними задачами. В случае успешной реализации программы импортозамещения курс рубля также будет усиливаться. Если же вероятность успеха программы дестабилизации в России будет увеличиваться, то давление на рубль усилится, так как Запад будет действовать по принципу «чем хуже, тем лучше»».</span> <br /> </p> <p class=""c2""> <br /> <strong>Технический анализ график доллар-рубль за последние 11 месяцев</strong> <br /> </p> <p class=""c4"">Помимо сбора комментариев специалистов, эксперт Y.com провел собственный обзор динамики курса рубля на основе технического анализа:</p> <p class=""c4"">Если просмотреть график доллар-рубль, то становится ясно, что с технической точки зрения картина по доллару была однозначна еще в конце августа: доллар достаточно долго «топтался» на уровнях 36 рублей, находясь в верхних границах устоявшегося с начала года коридора (33-36 рублей).</p> <p class=""c4"">На начало сентября стечение обстоятельств привело к тому, что фундаментальные факторы «нельзя было не учесть», и рубль прорвал сопротивление в 36 рублей (на графике это первая красная точка).</p> <p class=""c4"">Примечательно, что восходящая тенденция в рамках канала была начата еще в конце июня и тут, судя по всему, сказались Украинские события: история со сбитым Боингом, отправления гуманитарных конвоев и активные боевые действия летом.</p> <p class=""c4"">Эта тенденция была в силе вплоть до уровня 42 рублей за доллар, где можно говорить о последовательном снижении курса российской национальной валюты. Плавными темпы ослабления рубля были вплоть до конца октября.</p> <p class=""c4"">Начиная с конца октября (вторая красная точка на рисунке) происходит бесконтрольное падение курса рубля с разрывами (гэпами) в ценах, когда открытие торгов начиналось с ажиотажа и заканчивалось им же.</p> <p class=""c4""> <br /> <sub> <br /> <a target=""_blank"" href=""http://ystav.com/wp-content/uploads/2014/12/12.png""> <br /> <img class=""aligncenter wp-image-922 qlevel-9 qpos-0"" src=""http://ystav.com/wp-content/uploads/2014/12/12.png"" /> <br /> </a> <br /> </sub> <br /> </p> <p class=""c4"">Наиболее показательная ситуация отмечается не на дневном, а на недельном графике рубль-доллар, где практически каждая сеча начиная с сентября отмечена зеленым цветом (рост курса доллара). Однако где-то с уровня 45 рублей за доллар видна красная свеча, за которой следуют две зеленых, причем следующая за красной свеча закрылась в пятницу ростом (на максимумах) и у свечи нет тени. Такая ситуация может говорить о том, что у участников торгов присутствует известная нервозность, которая может быть вызвана не столько уверенностью в слабости рубля, сколько в перспективах того, что доллар выше 45 рублей вообще возможен.</p> <p class=""c4""> <br /> <a target=""_blank"" href=""http://ystav.com/wp-content/uploads/2014/12/22.png""> <br /> <img class=""aligncenter wp-image-923 qlevel-8 qpos-0"" src=""http://ystav.com/wp-content/uploads/2014/12/22-1024x633.png"" /> <br /> </a> <br /> </p> <p class=""c4"">Такая нервозность вызвана неопределенностью фундаментальных факторов от которых зависит курс рубля. Называются разные факторы падения: и политика, и санкции, и налоговые выплаты, и пресловутый «фактор Путина». Но высказывают это все политически озабоченные лица, которым следовало бы взглянуть на график стоимости нефти, чтобы понять, что все, происходящее сейчас с рублем, объясняется рынком нефти. Посмотрите на график стоимости нефти марки «Брент»: падение полностью коррелирует с падением рубля.</p> <p class=""c4""> <br /> <a target=""_blank"" href=""http://ystav.com/wp-content/uploads/2014/12/32.png""> <br /> <img class=""aligncenter wp-image-925 qlevel-8 qpos-0"" src=""http://ystav.com/wp-content/uploads/2014/12/32-1024x702.png"" /> <br /> </a> <br /> </p> <p class=""c4"">Таким образом, чтобы ответить на вопрос о том, куда будет двигаться рубль, следует проанализировать график нефти:</p> <p class=""wp-caption-text"">На графике представлена динамика цен нефти, начиная с 2007 года.</p> <p class=""c4"">На графике видно: всё, что сейчас происходит на рынке нефти, является продолжением глобального движения с 2008 года. По пикам цены на нефть прослеживается однозначный нисходящий канал. В конце лета цены на нефть находились у верхней границы, и поскольку предпосылок для роста цен не было, они двинулись вниз. Поддержкой для цены нефти в тот момент являлся уровень 110 долларов за баррель, и когда он был прорван, нефть стремительно покатилась к нижним границам канала.</p> <p class=""c4"">Если анализировать график, то поддержкой для цены нефти выступает ориентир в 68-72 доллара за баррель и вероятней всего, если нефть и сходит на уровень ниже (низшие цены в 2008-2009 годах), то затем поднимется до 80 долларов за баррель. В этом случае следует ожидать постепенного восстановления цен на нефть: как минимум, те уровни, что были пройдены быстрыми темпами должны будут проторговаться. Таким образом, мы считаем, что цены на нефть придут до уровня 80 долларов за баррель и затем могут восстанавливаться.</p> <p class=""c4"">Соответственно, в этом сценарии, относительно рубля мы можем ожидать возврат национальной валюты до 46 рублей за доллар, а возможно и ниже. Тем не менее, возврат к уровням курса 35 рублей за доллар в какой-либо ближайшей перспективе не просматривается.</p> <p class=""c4"">Что же касается пугающих 50 рублей за доллар, то мы ожидаем определенной консолидации этих уровней: ухудшения позиций рубля ждать не стоит. Последнее связано с тем, что хоть курс рубля и зависит от цены на нефть практически напрямую, необходимо учитывать, что даже в худшие времена (цена нефти 40 долларов за баррель или даже исторические 12 долларов за баррель) курс рубля всегда находил опору.</p> </div>"); var converted = new PortableHtmlConverter().Convert(xml); Console.WriteLine(converted.ToString()); var ctx = PortableHtmlSchema.Validate(xml, PortableHtmlStrictLevel.TrustAllImages | PortableHtmlStrictLevel.TrustAllLinks); Assert.False(ctx.Ok); ctx = PortableHtmlSchema.Validate(converted, PortableHtmlStrictLevel.TrustAllImages | PortableHtmlStrictLevel.TrustAllLinks); Assert.True(ctx.Ok); }