如果xml节点值具有'<'在里面

时间:2016-08-01 07:29:47

标签: c# xml linq

我有这样的代码

 var summary = member.Select(o => o.Element("summary"))
                .FirstOrDefault();

这给出了像

这样的值
<summary>
   Gets the number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1" />. 
</summary>

当我尝试从summary.value这样的摘要中获取值时,它只给出值

  

获取。

中包含的元素数

部分<see cref="T:System.Collections.Generic.ICollection 1&#34; /&gt;`在那个字符串中没有来。

请帮助解决此问题。

捕获调试。

Capture on debugging for reference

Summary value

更新

我尝试按照评论转义

        var summary = member.Select(o => o.XPathSelectElement("summary").Value.Replace("&lt;", "<").Replace("&amp;", "&").Replace("&gt;", ">"))
            .FirstOrDefault();

仍然是相同的结果。可能是我做错了。

2 个答案:

答案 0 :(得分:2)

之所以这样,是因为XDocument将其识别为嵌套元素。您应该将该元素转换为纯文本,然后您将拥有它。

类似的东西:

var element = document.Element("summary");
var value = element.Value;

value += string.Join(", ", document.Element("summary")
                                   .Descendants()
                                   .Where(x => x.NodeType == System.Xml.XmlNodeType.Element
                                   .Select(x => x.ToString()));

显然,你不能使用.Descendants()并使用.Element()或添加.FirstOrDefault()而不是使用该集合,但这是一般的想法

答案 1 :(得分:1)

根据这个link,我创建了一个XmlReader对象并读取内容并获取内部xml。代码是:

public static string InnerXml(this XElement self)
{
    var reader = self.CreateReader();
    reader.MoveToContent();

    return reader.ReadInnerXml()?.Trim();
}