Подтвердить что ты не робот

Как вставить текст при использовании XElement

Я использую новый System.Xml.Linq для создания HTML-документов (да, я знаю о HtmlDocument, но предпочитаю классы XDocument/XElement). У меня возникла проблема с вставкой   (или любой другой объект HTML). Я уже пробовал:

  • Просто поместить текст напрямую не получится, потому что он получает значение int &. new XElement("h1", "Text to keep together.");

  • Я пробовал синтаксический анализ в необработанном XML, используя следующее, но это barfs с этой ошибкой:

    XElement.Parse( "Текст &nbsp, чтобы, держать  . Вместе" );

    - > Ссылка на необъявленный объект 'nbsp'.`

  • Попробуйте номер три выглядит следующим образом. Если я сохраняю файл, есть просто пробел,   теряется.


var X = new XDocument(new XElement("Name", KeepTogether("Hi Mom!")));
private static XNode KeepTogether(string p)`
{
    return XElement.Parse("<xml>" + p.Replace(" ", "&#160;") + "</xml>").FirstNode;
}

Я не мог найти способ просто перетащить исходный текст без его ускользания. Мне что-то не хватает?

4b9b3361

Ответ 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

&amp;nbsp;

Ответ 8

Я придумал этот слегка глупый подход, который мне подходит: Строка замените все и ## AMP ##, когда вы храните данные. И отмените эту операцию на выходе. Я использую это в сочетании с столбцом XElement SQL и работает с удовольствием.

Привет

Neil