Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlReader内部文本问题_C#_.net_Xml - Fatal编程技术网

C# XmlReader内部文本问题

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

我有一个Xml文档,其中一些元素如下所示:

<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?