假设您有这样的XML:
<?xml version="1.0" encoding="utf-8"?>
<Class HashCode="307960707">
<Person>
<Class HashCode="-2020100801">
<FullName>
<FirstName>Dan</FirstName>
<LastName>K</LastName>
</FullName>
</Class>
<Age>20</Age>
<Class HashCode="-439631396">
<Address>
<Street>abc</Street>
<City>new york</City>
<ZipCode>30500</ZipCode>
<PhoneNumber>1245</PhoneNumber>
</Address>
</Class>
<Class HashCode="-1436395737">
<Person>
<Class HashCode="-1303968324">
<FullName>
<FirstName>katty</FirstName>
<LastName>G</LastName>
</FullName>
</Class>
<Age>18</Age>
<Class HashCode="-439631396">
<Address />
</Class>
<Class HashCode="307960707">
<Person />
</Class>
</Person>
</Class>
我希望能够按照它们出现的顺序仅使用XMLReader
迭代元素,这意味着class-&gt; Person-&gt; class-&gt; FullName等。
我试图使用像XMLReader.ReadStartElement()
这样的方法进行导航,但是当我读取像"\n"
这样看似也是元素的空格时,它才起作用。 :/
我试图用方法XMLReader.Read()
绕过那个空格但没有成功。
请帮助我理解我应该如何导航。
答案 0 :(得分:1)
XmlReader
构造函数有一个带有XmlReaderSettings
对象的重载。 XmlReaderSettings
对象具有IgnoreWhitespace
属性。
为了只读取下一个元素,您可以在XmlReader上实现扩展方法。
以下是一个例子:
public static class ExtensionMethods
{
public static bool ReadNextElement(this XmlReader reader)
{
while (reader.Read())
if (reader.NodeType == XmlNodeType.Element)
return true;
return false;
}
}
这里有一个小的控制台应用程序,可以证明这一点:
public class Program
{
public static void Main(string[] args)
{
var settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
settings.IgnoreProcessingInstructions = true;
var reader = XmlReader.Create("XMLFile1.xml", settings);
while (reader.ReadNextElement())
Console.WriteLine(reader.Name);
}
}