C# 检查xml节点是否包含简单文本或其他元素

C# 检查xml节点是否包含简单文本或其他元素,c#,xml,C#,Xml,我有一个问题我有一个简单的xml: <Event> <Value>Some Text</Value> <Value> <Solution Flag="1" /> </Value> </Event> 一些文本 值allays包含一个子文本或不同的节点 和简单的过程: const string xml = @"<Event><Value>Some Text</

我有一个问题我有一个简单的xml:

<Event>
  <Value>Some Text</Value>
  <Value>
    <Solution Flag="1" />
  </Value>
</Event>

一些文本
值allays包含一个子文本或不同的节点

和简单的过程:

 const string xml = @"<Event><Value>Some Text</Value><Value><Solution Flag = ""1""/></Value></Event>";
 XDocument xDocument = XDocument.Parse(xml);
 IEnumerable<XElement> xPath = xDocument.XPathSelectElements($"//Event");
 foreach (XElement xElement in xPath)
 {
     // check if xElement child is a string or x element
 }
conststringxml=@“一些文本”;
XDocument XDocument=XDocument.Parse(xml);
IEnumerable xPath=xDocument.XPathSelectElements($“//事件”);
foreach(xPath中的XElement-XElement)
{
//检查xElement子元素是字符串还是x元素
}

现在我要做的是迭代事件中的每个xElement,检查节点(值)是文本还是不同的x元素,但我确实知道该怎么做。有什么想法吗?

xDocument.XPathSelectElements($“//事件”)
返回具有指定标记的所有元素(
)。对于每个元素,您需要检查其子元素是否包含元素。正如@蕭為元 您可以使用
child.HasElements
属性:

IEnumerable<XElement> xPath = xDocument.XPathSelectElements($"//Event");
foreach (XElement xElement in xPath)
{
       var xElementChildren = xElement.Elements();
       foreach (var child in xElementChildren)
       {
              if (child.HasElements)
              {
                            // your logic
              }
       }             
}
IEnumerable xPath=xDocument.XPathSelectElements($“//事件”);
foreach(xPath中的XElement-XElement)
{
var xElementChildren=xElement.Elements();
foreach(xElementChildren中的变量child)
{
if(child.HasElements)
{
//你的逻辑
}
}             
}

xElement.FirstNode是XText 我会做的。工作示例:

publicstaticvoidtestforstackoverflow()
{
常量字符串xml=@“一些文本”;
XDocument XDocument=XDocument.Parse(xml);
IEnumerable xPath=xDocument.XPathSelectElements(@“/*”);
foreach(xPath中的XElement-XElement)
{
Write(“{0}{1}”、xElement.Name.LocalName、xElement.NodeType.ToString());
//检查xElement子元素是字符串还是x元素
if(xElement.FirstNode是XText)
Console.Write(“has XText”);
Console.WriteLine();
}
}

我没有测试,但是
HasElements
应该可以工作
public static void TestForStackOverflow()
{
        const string xml = @"<Event><Value>Some Text</Value><Value><Solution Flag = ""1""/></Value></Event>";
        XDocument xDocument = XDocument.Parse(xml);
        IEnumerable<XElement> xPath = xDocument.XPathSelectElements(@"//*");
        foreach (XElement xElement in xPath)
        {
            Console.Write("{0}     {1}", xElement.Name.LocalName, xElement.NodeType.ToString());
            // check if xElement child is a string or x element
            if (xElement.FirstNode is XText)
                Console.Write("   has XText");
            Console.WriteLine();
        }
}