当前位置: 首页 > 编程语言 > C#

如何获取XElement的值而不是所有子节点的值?分享

时间:2023-04-10 23:00:02 C#

如何获取XElement而不是所有子节点的值?示例xml:test1test2如果我查找parent.Value,其中parent是一个XElement,我得到“test1test2”。我期待“”。(因为没有文本/值。我应该寻找XElement的哪些属性?在元素中寻找文本数据时,您应该寻找等于XmlNodeType.Text子节点的NodeType属性。这些节点属于XText类型。下面的例子说明了这一点:varp=XElement.Parse("Hellotest1Worldtest2!");vartextNodes=fromcinp.Nodes()wherec.NodeType==XmlNodeType.Textselect(XText)c;foreach(vartintextNodes){Console.WriteLine(t.Value);}更新:如果您想要的只是第一个Text节点(如果有的话),这里是一个使用LINQ方法调用而不是查询理解语法的示例:varfirstTextNode=p.Nodes().OfType().FirstOrDefault();if(firstTextNode!=null){vartextValue=firstTextNode.Value;...对值做一些有趣的事情}注意:在这种情况下,使用First()或FirstOrDefault()将是fasterthanCount()>0优于FirstOrDefault()。Count总是枚举整个集合,而FirstOrDefault()只会枚举直到找到匹配项。可以拼接parent中所有XText节点的值:XElementparent=XElement.Parse(@"Hellotest1Worldtest2!");字符串结果=string.Concat(parent.Nodes().OfType().Select(t=>t.Value));//结果=="HelloWorld!"为了比较://parent.Value=="Hellotest1Worldtest2!"//(parent.HasElements?"":parent.Value)==""令人惊讶的是,Microsoft某处的编码人员认为将所有文本值作为连接的无界字符串返回会很有用。幸运的是,另一位MS开发人员编写了一个XElement扩展来返回他们所谓的文本节点的“浅值”。对于那些通过链接获得帮助的人,函数如下...)=>s.Append(c),s=>s.ToString());你这样称呼它是因为它也给你所有的空白(或者,想一想,你可以在扩展中修剪它,无论如何)//elementisavarinyourcodeoftypeXElement...stringmyTextContent=元素.ShallowValue().Trim();msdn说:包含此元素的所有文本内容的字符串。如果有多个文本节点,它们将被连接起来。所以这种行为是意料之中的。你可以这样解决你的问题:以上是C#学习教程:如何获取XElement的值而不是所有子节点的值?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——stringtextContent=parent.HasElements?“”:父值;//创建XElementXElementparent=XElement.解析(@“Hellotest1Worldtest2!”);//复制XElementtemp=newXElement(parent);//删除除根以外的所有元素temp.RemoveNodes();//现在,使用temp.value做一些事情,例如Console。WriteLine(temp.value);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: