2015-03-13 6 views
0

У меня есть объект XDocument, который содержит XHTML, и я хочу добавить элементы ABBR в строку. У меня есть список, который я просматриваю, чтобы искать значения, которые необходимо обернуть в элементах ABBR.Вставить XElement в значение другого XElement

Допустим, у меня есть XElement, который содержит XHTML, как так:

<p>Some text will go here</p> 

мне нужно настроить значение XElement выглядеть следующим образом:

<p>Some text <abbr title="Will Description">will</abbr> go here</p> 

Как мне это сделать?

UPDATE:

Я оберточное значение "будет" с HTML элементом ABBR.

Это то, что я до сих пор:

 // Loop through them 
     foreach (XElement xhtmlElement in allElements) 
     { 
      // Don't process this element if it has child elements as they 
      // will also be processed through here. 
      if (!xhtmlElement.Elements().Any()) 
      { 
       string innerText = GetInnerText(xhtmlElement); 

       foreach (var abbrItem in AbbreviationItems) 
       { 
        if (innerText.ToLower().Contains(abbrItem.Description.ToLower())) 
        { 
         var abbrElement = new XElement("abbr", 
          new XAttribute("title", abbrItem.Abbreviation), 
          abbrItem.Description); 

         innerText = Regex.Replace(innerText, abbrItem.Description, abbrElement.ToString(), 
                RegexOptions.IgnoreCase); 

         xhtmlElement.Value = innerText; 
        } 
       } 
      } 
     } 

Проблема такого подхода заключается в том, что, когда я установил свойство XElement значение, он кодирует теги XML (правильно обрабатывать его в виде строки, а не XML).

+0

Там не хватает информации здесь. Почему «будет» завернуто? что ты уже испробовал? –

+0

Насколько вы заботитесь о сохранении точных пробелов между словами и т. Д.? –

+0

В этом вопросе есть несколько частей: (1) С учетом строки найдите в ней известные аббревиатуры. (2) С учетом аббревиатуры найдите его описание. (3) Учитывая текст, содержащий текст XElement, замените часть текста на XElement. С какой частью вам нужна помощь? –

ответ

0

Если InnerText содержит правильный XML, вы можете попробовать следующее:

xhtmlElement.Value = XElement.Parse(innerText); 

вместо

xhtmlElement.Value = innerText; 
0

вы можете:

  • изменить значение элемента первой в строке,
  • отредактируйте и замените предыдущий элемент на xmltag,
  • , а затем замените старое значение на новое значение.

это может то, что вы ищете:

var element = new XElement("div"); 
var xml = "<p>Some text will go here</p>"; 
element.Add(XElement.Parse(xml)); 

//Element to replace/rewrite 
XElement p = element.Element("p"); 
var value = p.ToString(); 
var newValue = value.Replace("will", "<abbr title='Will Description'>will</abbr>"); 
p.ReplaceWith(XElement.Parse(newValue));