Freigeben über


ResXResourceReader.UseResXDataNodes Eigenschaft

Definition

Ruft einen Wert ab, der angibt, ob beim Lesen der aktuellen XML-Ressourcendatei oder des Streams ResXDataNode-Objekte zurückgegeben werden, oder legt diesen fest.

public:
 property bool UseResXDataNodes { bool get(); void set(bool value); };
public bool UseResXDataNodes { get; set; }
member this.UseResXDataNodes : bool with get, set
Public Property UseResXDataNodes As Boolean

Eigenschaftswert

true, wenn Ressourcendatenknoten abgerufen werden, false, wenn Ressourcendatenknoten ignoriert werden.

Ausnahmen

Bei einem Set-Vorgang ist der Enumerator für die Ressourcendatei oder den Stream bereits offen.

Beispiele

Im folgenden Beispiel werden Ressourcenelemente in einer XML-Datei aufgelistet und angezeigt. Wird zunächst auf false festgelegt, um sowohl Daten als auch Metadatenelemente anzuzeigen, UseResXDataNodes wie sie in der Ressourcendatei auftreten. Die zweite Enumeration ist UseResXDataNodes auf true festgelegt, sodass Ressourcendatenelemente als ResXDataNode Objekte zurückgegeben werden.

#using <System.dll>
#using <System.Windows.Forms.dll>

using namespace System;
using namespace System::Collections;
using namespace System::Resources;
using namespace System::ComponentModel::Design;

namespace UseDataNodesExample
{
    public ref class Program
    {
    public:
        static void Main()
        {
            Console::WriteLine("\nEnumerating as data items...");
            EnumResourceItems("Resource1.resx", false);

            Console::WriteLine("\nEnumerating as data nodes...");
            EnumResourceItems("Resource1.resx", true);
        }

        static void EnumResourceItems(String^ resxFile, bool useDataNodes)
        {
            ResXResourceReader^ reader = gcnew ResXResourceReader(resxFile);

            reader->UseResXDataNodes = useDataNodes;

            // Enumerate using IEnumerable.GetEnumerator().
            Console::WriteLine("\n  Default enumerator:");
            for each (DictionaryEntry entry in reader)
            {
                ShowResourceItem(entry, useDataNodes);
            }

            // Enumerate using GetMetadataEnumerator()
            IDictionaryEnumerator^ metadataEnumerator = reader->GetMetadataEnumerator();

            Console::WriteLine("\n  MetadataEnumerator:");
            while (metadataEnumerator->MoveNext())
            {
                ShowResourceItem(metadataEnumerator->Entry, useDataNodes);
            }

            // Enumerate using GetEnumerator()
            IDictionaryEnumerator^ enumerator = reader->GetEnumerator();

            Console::WriteLine("\n  Enumerator:");
            while (enumerator->MoveNext())
            {
                ShowResourceItem(enumerator->Entry, useDataNodes);
            }
            delete reader;
        }

        static void ShowResourceItem(DictionaryEntry entry, bool isDataNode)
        {
            // Use a nullptr type resolver.
            ITypeResolutionService^ typeres = nullptr;
            ResXDataNode^ dnode;

            if (isDataNode)
            {
                // Display from node info.
                dnode = (ResXDataNode^)entry.Value;
                Console::WriteLine("  {0}={1}", dnode->Name, dnode->GetValue(typeres));
            }
            else
            {
                // Display as DictionaryEntry info.
                Console::WriteLine("  {0}={1}", entry.Key, entry.Value);
            }
        }
    };
}

int main()
{
    UseDataNodesExample::Program::Main();
}
// The example program will have the following output:
//
// Enumerating as data items...
//
//   Default enumerator:
//   DataSample=Sample DATA value
//
//   MetadataEnumerator:
//   MetadataSample=Sample METADATA value
//
//   Enumerator:
//   DataSample=Sample DATA value
//
// Enumerating as data nodes...
//
//   Default enumerator:
//   DataSample=Sample DATA value
//   MetadataSample=Sample METADATA value
//
//   MetadataEnumerator:
//
//   Enumerator:
//   DataSample=Sample DATA value
//   MetadataSample=Sample METADATA value
using System;
using System.Collections;
using System.Resources;
using System.ComponentModel.Design;

namespace UseDataNodesExample
{
    public class Program
    {
        public static void Main()
        {
            Console.WriteLine("\nEnumerating as data items...");
            EnumResourceItems("Resource1.resx", false);

            Console.WriteLine("\nEnumerating as data nodes...");
            EnumResourceItems("Resource1.resx", true);
        }

        public static void EnumResourceItems(string resxFile, bool useDataNodes)
        {
            using (ResXResourceReader reader = new ResXResourceReader(resxFile))
            {
                reader.UseResXDataNodes = useDataNodes;

                // Enumerate using IEnumerable.GetEnumerator().
                Console.WriteLine("\n  Default enumerator:");
                foreach (DictionaryEntry entry in reader)
                {
                    ShowResourceItem(entry, useDataNodes);
                }

                // Enumerate using GetMetadataEnumerator()
                IDictionaryEnumerator metadataEnumerator = reader.GetMetadataEnumerator();

                Console.WriteLine("\n  MetadataEnumerator:");
                while (metadataEnumerator.MoveNext())
                {
                    ShowResourceItem(metadataEnumerator.Entry, useDataNodes);
                }

                // Enumerate using GetEnumerator()
                IDictionaryEnumerator enumerator = reader.GetEnumerator();

                Console.WriteLine("\n  Enumerator:");
                while (enumerator.MoveNext())
                {
                    ShowResourceItem(enumerator.Entry, useDataNodes);
                }
            }
        }

        public static void ShowResourceItem(DictionaryEntry entry, bool isDataNode)
        {
            // Use a null type resolver.
            ITypeResolutionService typeres = null;
            ResXDataNode dnode;

            if (isDataNode)
            {
                // Display from node info.
                dnode = (ResXDataNode)entry.Value;
                Console.WriteLine("  {0}={1}", dnode.Name, dnode.GetValue(typeres));
            }
            else
            {
                // Display as DictionaryEntry info.
                Console.WriteLine("  {0}={1}", entry.Key, entry.Value);
            }
        }
    }
}

// The example program will have the following output:
//
// Enumerating as data items...
//
//   Default enumerator:
//   DataSample=Sample DATA value
//
//   MetadataEnumerator:
//   MetadataSample=Sample METADATA value
//
//   Enumerator:
//   DataSample=Sample DATA value
//
// Enumerating as data nodes...
//
//   Default enumerator:
//   DataSample=Sample DATA value
//   MetadataSample=Sample METADATA value
//
//   MetadataEnumerator:
//
//   Enumerator:
//   DataSample=Sample DATA value
//   MetadataSample=Sample METADATA value
Imports System.Collections
Imports System.Resources
Imports System.ComponentModel.Design

Namespace UseDataNodesExample
    Public Class Program
        Public Shared Sub Main()
            Console.WriteLine(Environment.NewLine + "Enumerating as data items...")
            EnumResourceItems("Resource1.resx", False)

            Console.WriteLine(Environment.NewLine + "Enumerating as data nodes...")
            EnumResourceItems("Resource1.resx", True)
        End Sub

        Public Shared Sub EnumResourceItems(resxFile As String, useDataNodes As Boolean)
            Using reader As New ResXResourceReader(resxFile)
                reader.UseResXDataNodes = useDataNodes

                ' Enumerate using IEnumerable.GetEnumerator().
                Console.WriteLine(Environment.NewLine + "  Default enumerator:")
                For Each entry As DictionaryEntry In reader
                    ShowResourceItem(entry, useDataNodes)
                Next entry

                ' Enumerate using GetMetadataEnumerator()
                Dim metadataEnumerator As IDictionaryEnumerator = reader.GetMetadataEnumerator()

                Console.WriteLine(Environment.NewLine + "  MetadataEnumerator:")
                While metadataEnumerator.MoveNext()
                    ShowResourceItem(metadataEnumerator.Entry, useDataNodes)
                End While

                ' Enumerate using GetEnumerator()
                Dim enumerator As IDictionaryEnumerator = reader.GetEnumerator()

                Console.WriteLine(Environment.NewLine + "  Enumerator:")
                While enumerator.MoveNext()
                    ShowResourceItem(enumerator.Entry, useDataNodes)
                End While
            End Using
        End Sub

        Public Shared Sub ShowResourceItem(entry As DictionaryEntry, isDataNode As Boolean)
            ' Use a Nothing type resolver.
            Dim typeres As ITypeResolutionService = Nothing
            Dim dnode As ResXDataNode

            If isDataNode Then
                ' Display from node info.
                dnode = CType(entry.Value, ResXDataNode)
                Console.WriteLine("  {0}={1}", dnode.Name, dnode.GetValue(typeres))
            Else
                ' Display as DictionaryEntry info.
                Console.WriteLine("  {0}={1}", entry.Key, entry.Value)
            End If
        End Sub
    End Class
End Namespace

' The example program will have the following output:
'
' Enumerating as data items...
'
'   Default enumerator:
'   DataSample=Sample DATA value
'
'   MetadataEnumerator:
'   MetadataSample=Sample METADATA value
'
'   Enumerator:
'   DataSample=Sample DATA value
'
' Enumerating as data nodes...
'
'   Default enumerator:
'   DataSample=Sample DATA value
'   MetadataSample=Sample METADATA value
'
'   MetadataEnumerator:
'
'   Enumerator:
'   DataSample=Sample DATA value
'   MetadataSample=Sample METADATA value

Die im Beispiel verwendete XML-Ressourcendatei enthält einen Datenknoten und einen Metadatenknoten. Um die XML-Datei mit dem vorherigen Beispiel zu verwenden, kopieren Sie den folgenden Text, und speichern Sie ihn in einer Datei mit dem Namen Resource1.resx.

<?xml version="1.0" encoding="utf-8"?>  
<root>  
  <resheader name="resmimetype">  
    <value>text/microsoft-resx</value>  
  </resheader>  
  <resheader name="version">  
    <value>2.0</value>  
  </resheader>  
  <resheader name="reader">  
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0,  
           Culture=neutral, PublicKeyToken=b77a5c561934e089  
    </value>  
  </resheader>  
  <resheader name="writer">  
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0,  
           Culture=neutral, PublicKeyToken=b77a5c561934e089  
    </value>  
  </resheader>  
  <data name="DataSample" xml:space="preserve">  
    <value>Sample DATA value</value>  
  </data>  
  <metadata name="MetadataSample">  
    <value>Sample METADATA value</value>  
  </metadata>  
</root>  

Hinweise

Sie können die UseResXDataNodes Eigenschaft festlegen, bevor Sie mit dem Auflisten von Ressourcen beginnen. Standardmäßig ist falsesein Wert .

Gilt für: