Как вставить текст при использовании XElement
Я использую новый System.Xml.Linq для создания HTML-документов (да, я знаю о HtmlDocument, но предпочитаю классы XDocument/XElement). У меня возникла проблема с вставкой
(или любой другой объект HTML). Я уже пробовал:
-
Просто поместить текст напрямую не получится, потому что он получает значение int &.
new XElement("h1", "Text to keep together.");
-
Я пробовал синтаксический анализ в необработанном XML, используя следующее, но это barfs с этой ошибкой:
XElement.Parse( "Текст  , чтобы, держать . Вместе" );
- > Ссылка на необъявленный объект 'nbsp'.`
-
Попробуйте номер три выглядит следующим образом. Если я сохраняю файл, есть просто пробел,  
теряется.
var X = new XDocument(new XElement("Name", KeepTogether("Hi Mom!")));
private static XNode KeepTogether(string p)`
{
return XElement.Parse("<xml>" + p.Replace(" ", " ") + "</xml>").FirstNode;
}
Я не мог найти способ просто перетащить исходный текст без его ускользания. Мне что-то не хватает?
Ответы
Ответ 1
Я не мог найти способ просто перетащить необработанный текст без его ускорения.
Просто поместите символ Юникода в & nbsp; относится к (U + 00A0 NO-BREAK SPACE) непосредственно в тексте node, затем пусть сериализатор беспокоится о том, нужно ли ему ускользнуть до & # 160; или нет. (Вероятно, нет: если вы используете UTF-8 или ISO-8859-1 в качестве кодировки вашей страницы, этот символ можно включить напрямую, не беспокоясь о его кодировании в ссылку на объект или ссылку на символ).
new XElement("h1", "Text\u00A0to\u00A0keep\u00A0together");
Ответ 2
Замена и с помощью маркера, такого как ## AMP ##, решила мою проблему. Может быть, это не самое приятное решение, но у меня есть демо для клиента за 10 минут, так что... Мне все равно:)
спасибо для идеи
Ответ 3
Я знаю, что это старо, но я нашел что-то, и я довольно удивлен!
XElement element = new XElement("name",new XCData("<br /> & etc"));
И вот ты! Текст CDATA!
Ответ 4
Вы также можете попробовать использовать нумерованные объекты, им не требуется декларация.
Нумерованный объект, эквивалентный названному объекту & nbsp; < 160; </p>
Ответ 5
В отличие от amp (&), lt (<) и т.д. nbsp не является известным объектом для XML, поэтому вам нужно его объявить.
В XML, например. & Хуг; обрабатывается как сущность, парсер будет ссылаться на свое значение для вывода результата.
// the xml, plz remove '.' within xml
string xml = "<xml>test&.n.b.s.p;test</xml>";
// declare nbsp as xml entity and its value is " " in this case.
string declareEntity = "<!DOCTYPE xml [<!ENTITY nbsp \" \">]>";
XElement x = XElement.Parse( declareEntity + xml );
// output with a space between tests
// <xml>test test</xml>
или
// plz remove '.' in the string
XElement.Parse("<xml>" + HttpUtility.HtmlEncode("Text&.n.b.s.p;keep everything") + "</xml>");
Ответ 6
Вы можете вставить символ, как вы хотите его увидеть, если вы скопируете его в другом месте. Студия Viusal позволяет это.
Хотя это трудно сделать, если вам нужно , легко, если вам нужны какие-либо символы, например:
& bull... просто вставить •
& Harr;... просто вставьте ↔
Ответ 7
&nbsp;
Ответ 8
Я придумал этот слегка глупый подход, который мне подходит:
Строка замените все и ## AMP ##, когда вы храните данные.
И отмените эту операцию на выходе.
Я использую это в сочетании с столбцом XElement SQL и работает с удовольствием.
Привет
Neil