|
.NET, загрузка XHTML и раскрытие entities (& etc)
|
|||
---|---|---|---|
#18+
Ситуация такая. Есть XHTML, в котором есть ссылка на собственное DTD, а в DTD описаны допустимые энтити (entity). Типа — Задача: 1. Средствами .NET загрузить XHTML. 2. Провести XSL преобразование. 3. Сохранить результат в файл. При этом энтити должны в результате остаться в изначальном виде. Т.е. в виде текста, например, —. Проблема в том, что .NET эти энтити раскрывает при загрузке и меняет их на символы. Например, — на длинное тире. И внутри XSLT уже никак нельзя получить доступ к энтити в исходном виде - только в виде замененых символов. В результирующий фаил попадает уже не текстовое представление энтити, а символьное. Как быть? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2009, 16:19 |
|
.NET, загрузка XHTML и раскрытие entities (& etc)
|
|||
---|---|---|---|
#18+
Что-то не вижу как отредактировать свое сообщение. Там форум позаменял текст энтити на символы. Точнее браузер отражает символы. Ну надеюсь понятно где там по смыслу — а где длинное тире. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2009, 16:22 |
|
.NET, загрузка XHTML и раскрытие entities (& etc)
|
|||
---|---|---|---|
#18+
petravКак быть? :) Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
17.04.2009, 22:37 |
|
.NET, загрузка XHTML и раскрытие entities (& etc)
|
|||
---|---|---|---|
#18+
_Vasilisk_petravКак быть? :) Код: plaintext
Код: plaintext
Не поможет. Тут такое дело, как я понимаю. Когда грузится документ все энтити тупо заменяются на символы. И никакой информации о том, что это была энтити не сохраняется. Но касается это не всех энтити. Например, раскрытия встроенных в XML энтити (типа amp) можно избежать - именно так как Вы и описали. Но! Это не касается внешних энтити описанных в DTD. Например, mdash. Описаны они потому что если их не описать, то XHTML в XMLDOM не загрузится. А если описать, то они тут же раскрываются в символы, а к их коду доступа получить уже не получается. В MSXML этой проблемы не было, а в .NET есть. Это нужно потому что много автоматической обработки xhtml и код этой обработки не знает ничего про длинные тире, только про коды. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2009, 19:57 |
|
.NET, загрузка XHTML и раскрытие entities (& etc)
|
|||
---|---|---|---|
#18+
Есть свойство XmlDocument.XmlResolver - оно ответственно за раскрытие. Но вот как че делать, я понять не могу :( ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2009, 20:08 |
|
.NET, загрузка XHTML и раскрытие entities (& etc)
|
|||
---|---|---|---|
#18+
Я эту проблему решил для себя через &. На примере символа < и > в выходной поток HTML: Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2009, 08:37 |
|
.NET, загрузка XHTML и раскрытие entities (& etc)
|
|||
---|---|---|---|
#18+
NeroBrainЯ эту проблему решил для себя через &. На примере символа < и > в выходной поток HTML: Код: plaintext
Код: plaintext
Да, этого и требовалось. Я тоже пока так и сделал. Т.е. подгружаю xhtml и в строке заменяю, например: Код: plaintext
(Ведущие символы & я тут опустил). А в xslt преобразовании провожу обратную операцию. И все работает, только бьет по производительности, а она там критична ибо обрабатываются большие объемы текста и дальше будет только хуже. Но это криво. Кстати, lt и gt - встроенные в xml сущности и сними не нужно таких извратов. Я тут нашел убер ссылку: http://msdn.microsoft.com/ru-ru/library/system.xml.xmltextreader.entityhandling.aspx И сделал как тут написано. Это работает только если XmlTextReader создавать руками, а не через XmlReader.Create. Через XmlReader.Create создаются ридеры которые по умолчанию все сущности раскрывают. Об этом написано в статье про XmlReader.Create. В мсдн. И действительно после этого документ начал корректно загружаться без раскрытия сущностей. Это видно по doc.InnerXml. Но в xslt они все равно уже оказываются раскрытими. Я передают из xslt в C# код ноду в таком виде: XPathNavigator parent. И parent.InnerXml уже дает развернутую сущность. Так что проблема решилась только на половину. В принципе, это конечно не критично, но по тихонечку я рою тут. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2009, 14:30 |
|
|
start [/forum/topic.php?fid=14&msg=35939164&tid=1333588]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 321ms |
total: | 436ms |
0 / 0 |