1

次のような 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.Read()

そのようにナビゲートする方法を理解するのを手伝ってください。

4

1 に答える 1

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);
    }
}
于 2012-12-17T23:48:26.650 に答える