我xmlreader
用来读取 XML 文件。我想确定一个元素是否有子节点。
目前,我使用该IsEmptyElement
方法来查找是否有子元素。我发现,即使标签包含文本数据而不是元素,它也会返回 true。
if (!file.IsEmptyElement) {
elem.subElems.Add(readXml(file));
}
我如何使用 xml 阅读器解决此问题?任何帮助,将不胜感激。
谢谢你。
我xmlreader
用来读取 XML 文件。我想确定一个元素是否有子节点。
目前,我使用该IsEmptyElement
方法来查找是否有子元素。我发现,即使标签包含文本数据而不是元素,它也会返回 true。
if (!file.IsEmptyElement) {
elem.subElems.Add(readXml(file));
}
我如何使用 xml 阅读器解决此问题?任何帮助,将不胜感激。
谢谢你。
如果您只需要检查,请改用XmlDocument ......我发现它更容易理解和编码。
XmlDocument doc = new XmlDocument();
doc.LoadXml("YourDocument");
XmlNode root = doc.FirstChild;
if (root.HasChildNodes)
{
// Do something...
}
读者:
using (XmlReader reader = ...)
{
while (reader.Read())
{
if ((reader.NodeType == XmlNodeType.Element) && (reader.Name == ...))
{
Int32 childrenCount = CountChildred(reader, XmlNodeType.Element);
// Your code...
public static Int32 CountChildred(XmlReader node, XmlNodeType type)
{
Int32 count = 0;
Int32 currentDepth = node.Depth;
Int32 validDepth = currentDepth + 1;
while (node.Read() && (node.Depth != currentDepth))
{
if ((node.NodeType == type) && (node.Depth == validDepth))
++count;
}
return count;
}
IsEmptyElement的行为是预期的,实际上对于 reader,当 reader 位于元素的开头时,这是您可以获得的唯一信息。此时阅读器尚未尝试读取元素的内部 XML,因此没有任何信息是否存在任何子节点、文本节点或两者的混合。
要修复,您需要阅读每个子元素并将它们单独添加到您的列表(或您拥有的任何内容)中。