次の方法で共有


XmlValidatingReader.ResolveEntity メソッド

定義

EntityReference ノードのエンティティ参照を解決します。

public:
 override void ResolveEntity();
public override void ResolveEntity ();
override this.ResolveEntity : unit -> unit
Public Overrides Sub ResolveEntity ()

例外

リーダーが EntityReference ノードに配置されていません。

次の例では、一般的なエンティティを展開するために使用 ResolveEntity します。

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
{
   XmlValidatingReader^ reader = nullptr;
   XmlTextReader^ txtreader = nullptr;
   try
   {
      
      //Create and load the XmlTextReader with the XML file. 
      txtreader = gcnew XmlTextReader( "book1.xml" );
      txtreader->WhitespaceHandling = WhitespaceHandling::None;
      
      //Create the XmlValidatingReader over the XmlTextReader.
      //Set the reader to not expand general entities.
      reader = gcnew XmlValidatingReader( txtreader );
      reader->ValidationType = ValidationType::None;
      reader->EntityHandling = EntityHandling::ExpandCharEntities;
      reader->MoveToContent(); //Move to the root element.
      reader->Read(); //Move to title start tag.
      reader->Skip(); //Skip the title element.
      
      //Read the misc start tag.  The reader is now positioned on
      //the entity reference node.
      reader->ReadStartElement();
      
      //Because EntityHandling is set to ExpandCharEntities, you must call 
      //ResolveEntity to expand the entity.  The entity replacement text is 
      //then parsed and returned as a child node.         
      Console::WriteLine( "Expand the entity..." );
      reader->ResolveEntity();
      Console::WriteLine( "The entity replacement text is returned as a text node." );
      reader->Read();
      Console::WriteLine( "NodeType: {0} Value: {1}", reader->NodeType, reader->Value );
      Console::WriteLine( "An EndEntity node closes the entity reference scope." );
      reader->Read();
      Console::WriteLine( "NodeType: {0} Name: {1}", reader->NodeType, reader->Name );
   }
   finally
   {
      if ( reader != nullptr )
            reader->Close();
   }

}

using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {
     XmlValidatingReader reader = null;
     XmlTextReader txtreader = null;

     try
     {
       //Create and load the XmlTextReader with the XML file.
       txtreader = new XmlTextReader("book1.xml");
       txtreader.WhitespaceHandling = WhitespaceHandling.None;

       //Create the XmlValidatingReader over the XmlTextReader.
       //Set the reader to not expand general entities.
       reader = new XmlValidatingReader(txtreader);
       reader.ValidationType = ValidationType.None;
       reader.EntityHandling = EntityHandling.ExpandCharEntities;

       reader.MoveToContent();  //Move to the root element.
       reader.Read();  //Move to title start tag.
       reader.Skip();  //Skip the title element.

       //Read the misc start tag.  The reader is now positioned on
       //the entity reference node.
       reader.ReadStartElement();

       //Because EntityHandling is set to ExpandCharEntities, you must call
       //ResolveEntity to expand the entity.  The entity replacement text is
       //then parsed and returned as a child node.
       Console.WriteLine("Expand the entity...");
       reader.ResolveEntity();

       Console.WriteLine("The entity replacement text is returned as a text node.");
       reader.Read();
       Console.WriteLine("NodeType: {0} Value: {1}", reader.NodeType ,reader.Value);

       Console.WriteLine("An EndEntity node closes the entity reference scope.");
       reader.Read();
       Console.WriteLine("NodeType: {0} Name: {1}", reader.NodeType,reader.Name);
    }
    finally
    {
       if (reader != null)
         reader.Close();
    }
  }
}
Option Strict
Option Explicit

Imports System.IO
Imports System.Xml

Public Class Sample
   
   Public Shared Sub Main()
      Dim reader As XmlValidatingReader = Nothing
      Dim txtreader As XmlTextReader = Nothing
      
      Try
         'Create and load the XmlTextReader with the XML file. 
         txtreader = New XmlTextReader("book1.xml")
         txtreader.WhitespaceHandling = WhitespaceHandling.None
         
         'Create the XmlValidatingReader over the XmlTextReader.
         'Set the reader to not expand general entities.
         reader = New XmlValidatingReader(txtreader)
         reader.ValidationType = ValidationType.None
         reader.EntityHandling = EntityHandling.ExpandCharEntities
         
         reader.MoveToContent() 'Move to the root element.
         reader.Read() 'Move to title start tag.
         reader.Skip() 'Skip the title element.
         'Read the misc start tag.  The reader is now positioned on
         'the entity reference node.
         reader.ReadStartElement()
         
         'Because EntityHandling is set to ExpandCharEntities, you must call 
         'ResolveEntity to expand the entity.  The entity replacement text is 
         'then parsed and returned as a child node.  
         Console.WriteLine("Expand the entity...")
         reader.ResolveEntity()
         
         Console.WriteLine("The entity replacement text is returned as a text node.")
         reader.Read()
         Console.WriteLine("NodeType: {0} Value: {1}", reader.NodeType, reader.Value)
         
         Console.WriteLine("An EndEntity node closes the entity reference scope.")
         reader.Read()
         Console.WriteLine("NodeType: {0} Name: {1}", reader.NodeType, reader.Name)
      
      Finally
         If Not (reader Is Nothing) Then
            reader.Close()
         End If
      End Try
   End Sub
End Class

この例では、 book1.xmlファイルを入力として使用します。


<?xml version='1.0' ?>
<!DOCTYPE book [<!ENTITY h 'hardcover'>]>
<book>
  <title>Pride And Prejudice</title>
  <misc>&h;</misc>
</book>

注釈

注意

このXmlValidatingReaderクラスは、.NET Framework 2.0 では廃止されています。 クラスとメソッドを使用してXmlReaderSettings、検証XmlReaderインスタンスをCreate作成できます。 詳細については、XmlReader のリファレンス ページの「解説」を参照してください。

リーダーがノード (XmlNodeType.EntityReference) 上に配置されている場合Read、このメソッドの呼び出し後にEntityReference呼び出されると、エンティティ置換テキストが解析されます。 エンティティ置換テキストが完了すると、エンティティ参照スコープを EndEntity 閉じるノードが返されます。

注意

このメソッドを呼び出した後、エンティティが属性値の一部である場合は、エンティティへのステップインを呼び出す ReadAttributeValue 必要があります。

適用対象

こちらもご覧ください