我在互联网上找到了这个。
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
答案 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
}
你必须递归检查所有元素。