我试图从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是空的。
我做错了什么?
谢谢你的任何提示......
答案 0 :(得分:2)
在选择元素时,您需要考虑XML中的命名空间,您可以使用XNamespace
来声明和使用它 - 这可行:
XNamespace xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation";
var Paras = root.Descendants(xmlns + "Paragraph");
答案 1 :(得分:2)
感谢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