簡體   English   中英

如何使用XMLReader遍歷XML中的XML元素並繞過空白?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM