C#标识XML文件中的父元素元素

时间:2017-07-07 12:48:24

标签: c# xml

我在互联网上找到了这个。

string xml = @"
<food>
  <child>
    <nested />
  </child>
  <child>
    <other>
    </other>
  </child>
</food>
";

XmlReader rdr = XmlReader.Create(new System.IO.StringReader(xml));
while (rdr.Read())
{
  if (rdr.NodeType == XmlNodeType.Element)
  {
  Console.WriteLine(rdr.LocalName);
  }
}

上述结果将是

food
child
nested
child
other

这是完美的,我需要确定哪些元素包含子元素。

例如,我需要此输出

startParent_food
    startParent_child
        nested
    endParent_child
    startParent_child
        other
    endParent_child
endParent_food

2 个答案:

答案 0 :(得分:4)

您可以使用$title = $var->name; $string = str_replace(' ', '-', $title); // Replaces all spaces with hyphens. $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars. copy($img, public_path('/test' . $string . time())); 执行此操作,但这并不是特别容易。你无法知道一个元素是否有孩子而没有继续阅读,所以你必须缓冲和跟踪各种事物(因为XmlReader是向前的)。除非你有充分的理由使用这种低级API,否则我强烈建议你避免使用它。

使用LINQ to XML

这是相当简单的
XmlReader

如果您在评论中暗示,您的实际要求是修改某些值,那么您可以执行此操作而无需处理XML结构的详细信息。例如,要修改private static void Dump(XElement element, int level) { var space = new string(' ', level * 4); if (element.HasElements) { Console.WriteLine("{0}startParent_{1}", space, element.Name); foreach (var child in element.Elements()) { Dump(child, level + 1); } Console.WriteLine("{0}endParent_{1}", space, element.Name); } else { Console.WriteLine("{0}{1}", space, element.Name); } } 元素的值:

nested

有关这两者的演示,请参阅this fiddle

答案 1 :(得分:0)

要检查子元素,您的代码将如下所示:

    System.Xml.Linq.XElement _x;
    _x = System.Xml.Linq.XElement.Parse(xml);

    if (_x.HasElements)
    {
        // your req element
    }

你必须递归检查所有元素。