如何在使用C#计算没有内容的元素时,如何从XML(带有后代)中读取同级元素的内容?
问题描述:
我想读取一个XML文件的内容并将其存储在各种列表中,但是,在我一直遇到麻烦的地方是试图读取不是最内层子节点的兄弟节点(兄弟姐妹1-4和下面的tableName )。如何在使用C#计算没有内容的元素时,如何从XML(带有后代)中读取同级元素的内容?
<Parent parent="1">
<sibling1>256</sibling1>
<sibling2>1000</sibling2>
<sibling3>25</sibling3>
<sibling4 id="1">
<tableName></tableName>
<table id="0">
<row id="0">
<child1></child1>
<child2>0</child2>
<child3>default</child3>
</row>
</sibling4>
</Parent>
我不能使用ReadElementContentAs
因为他们有后代,我发现了一种围绕它的代码,但我仍然会碰到麻烦,如果我遇到了(以上如表名)没有内容的元素。如果元素没有内容(并且它可以或不可以有内容),我的代码解决方案(下面的tableName示例)不起作用,程序崩溃,因为它正在寻找错误类型的节点。是否有更简单的方式来访问这些兄弟姐妹的内容,或者说明元素可能没有内容的事实?我是XML新手,所以我不确定所有不同的方法。谢谢!
// tableName - WILL NOT WORK IF TABLE NAME IS LEFT BLANK (MUST HAVE DEFAULT)
xmlIn.ReadToDescendant("tableName");
xmlIn.Read();
List.tableName = xmlIn.Value;
xmlIn.Read();
xmlIn.ReadEndElement();
答
您必须先检查节点的类型,然后再阅读或移动节点。
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.LocalName.StartsWith("sibling"))
{
Console.Write(reader.LocalName + ": ");
reader.Read();
if (reader.NodeType == XmlNodeType.Text)
Console.WriteLine(reader.ReadContentAsString());
else
{
reader.ReadToFollowing("tableName");
Console.Write(reader.LocalName + ": ");
var tableName = reader.ReadElementContentAsString();
Console.WriteLine($"'{tableName}'");
}
}
}
举一个你想获得什么数据的例子。 –