Извлечение обычного текста из текстового поля Silverlight - LINQ to XML - PullRequest
1 голос
/ 29 мая 2011


Я пытаюсь получить простой текст из содержимого xaml текстового поля SL 4.
Содержимое выглядит следующим образом:

<Section xml:space=\"preserve\" HasTrailingParagraphBreakOnPaste=\"False\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">
    <Paragraph FontSize=\"12\" FontFamily=\"Arial\" Foreground=\"#FF000000\" FontWeight=\"Normal\" FontStyle=\"Normal\" FontStretch=\"Normal\" TextAlignment=\"Left\">
         <Run Text=\"Biggy\" />
    </Paragraph>
</Section>

Когда я пытаюсь это сделать:

            XElement root = XElement.Parse(xml);
            var Paras = root.Descendants("Paragraph");
            foreach (XElement para in Paras)
            {
                foreach (XElement run in Paras.Descendants("Run"))
                {
                    XAttribute a = run.Attribute("Text");
                    text += null != a ? (string) a : "";
                }
            }

Пункты пустые.
Что я делаю не так?
Спасибо за любые подсказки ...

Ответы [ 2 ]

2 голосов
/ 24 ноября 2012

Благодаря BrokenGlass. Полная функция:

string StringFromRichTextBox(string XAML)
    {
        XElement root = XElement.Parse(XAML);
        XNamespace xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation";
        StringBuilder sb = new StringBuilder();
        var Paras = root.Descendants(xmlns + "Paragraph");            
        foreach (XElement para in Paras)
        {
            foreach (XElement run in Paras.Descendants(xmlns + "Run"))
            {
                XAttribute a = run.Attribute("Text");
                sb.Append(null != a ? (string)a : "");
            }
        }
        return sb.ToString();
    }

Это сработало! Надеюсь, это поможет вам. Нгуен Минь Хиен

2 голосов
/ 29 мая 2011

Вам необходимо учитывать пространство имен в вашем XML при выборе элементов, вы можете использовать XNamespace, чтобы объявить и использовать его - это работает:

XNamespace xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation";
var Paras = root.Descendants(xmlns + "Paragraph");
...