![](/img/trans.png)
[英]How can I read specific elements from XML string using XMLREADER in C#
[英]How can I iterate on XML elements from an XML using XMLReader and bypass whitespaces?
假設您有這樣的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-> Person-> class-> FullName等。
我試圖使用XMLReader.ReadStartElement()
類的方法進行導航,但是當我讀取諸如"\\n"
類的空白(也似乎也是一個元素XMLReader.ReadStartElement()
,該方法不起作用。 :/
我試圖用方法XMLReader.Read()
繞過空白,但沒有成功。
請幫助我了解我應該如何導航。
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.