C# XmlReader内部文本问题
我有一个Xml文档,其中一些元素如下所示:C# XmlReader内部文本问题,c#,.net,xml,C#,.net,Xml,我有一个Xml文档,其中一些元素如下所示: <rootNode attib1="qwerty" > <subNode1>W</subNode1> <subNode2>X</subNode2> <subNode3>Y</subNode3> <subNode4>Z</subNode4> ABC </rootNode> W X Y Z 基础知识 我的目标是从上述示例中获得“AB
<rootNode attib1="qwerty" >
<subNode1>W</subNode1>
<subNode2>X</subNode2>
<subNode3>Y</subNode3>
<subNode4>Z</subNode4>
ABC
</rootNode>
W
X
Y
Z
基础知识
我的目标是从上述示例中获得“ABC”。我尝试查看XmlElement类中的InnerText(返回“WXYZABC”)和InnerXml和Value(返回null)属性,以及XmlReader类中的一组属性。不知何故,我看不到一个优雅的方法来提取我需要的数据
有人能帮我吗
提前感谢。尝试
xmlement.Value
编辑:这是错误的方法,因为它在元素节点上总是返回NULL。试试这个:
string xml = @"<rootNode attib1=""qwerty"" >
<subNode1>W</subNode1>
<subNode2>X</subNode2>
<subNode3>Y</subNode3>
<subNode4>Z</subNode4>
ABC
</rootNode>";
var xElement = XElement.Parse(xml);
xElement.Elements().Remove();
xElement.Value.Dump();
stringxml=@”
W
X
Y
Z
基础知识
";
var-xElement=xElement.Parse(xml);
xElement.Elements().Remove();
xElement.Value.Dump();
它所做的是删除所有已知元素,并留下您要查找的文本。基于@djechelon的出色建议,我似乎找到了解决此问题的方法:
XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"D:\Test.xml");
XmlElement xmlElement = xdoc.DocumentElement;
foreach (XmlNode node in xmlElement.ChildNodes)
if (node.NodeType == XmlNodeType.Text
&& !string.IsNullOrWhiteSpace(node.Value))
Console.WriteLine(node.Value.Trim());
上面使用了一个简单的事实,即内部文本也是XmlNode,作为XmlElement的ChildNodes集合的一部分
谢谢大家的回复 @Keith,
xmlement.Value
始终返回null
。另外,发问者说他已经尝试过:)XmlElement.Value仅当元素是叶节点AFAIK时才返回非null值。@Chetan,不,总是null
。看到了吧,是的,我很惊讶这就是它的回报。似乎是获取@Chetan所需内容的“正确”方式,但文档中的说法不同。尽管我必须承认:我的建议是无论如何不要以这种方式形成我的XML:)@Keith当然。不幸的是,这种形式的Xml有时会在捕获WCF跟踪时被运行时吐出。我目前正在编写一个“清理工具”来修复这些错误@Frédéric感谢您提供MSDN链接。我被纠正了。rootNode元素是否有一个额外的XmlElement类型为XmlTextNode,值为ABC?