从silverlight富文本框中提取纯文本-LINQ to XML

本文关键字:文本 -LINQ to XML 提取 silverlight | 更新日期: 2023-09-27 17:57:59


我正在尝试从SL 4富文本框的xaml内容中获取纯文本
内容如下:

<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 : "";
                }
            }

Paras是空的
我做错了什么
谢谢你的提示。。。

从silverlight富文本框中提取纯文本-LINQ to XML

在选择元素时,您需要考虑XML中的命名空间,您可以使用XNamespace来声明和使用它-这很有效:

XNamespace xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation";
var Paras = root.Descendants(xmlns + "Paragraph");
感谢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();
    }

成功了!希望这对你有所帮助。Nguyen Minh Hien