共用方式為


使用 XmlValidatingReader 讀取 XML 片段

XmlValidatingReader 類別可將字串剖析為 XML 片段,以讀取 XML 片段。

Note注意事項

XmlValidatingReader 類別在 Microsoft .NET Framework 2.0 版本 中已過時。您可以使用 XmlReaderSettings 類別和 Create 方法,來建立驗證 XmlReader 執行個體。如需詳細資訊,請參閱使用 XmlReader 驗證 XML 資料

XmlParserContext 類別

XmlParserContext 類別可用來建構含有剖析 XML 片段或文件所需之內容資訊的 XmlValidatingReader 物件。XmlParserContext 類別可提供像是所使用的 XmlNameTable、命名空間範圍、文件類型定義 (DTD)、編碼和目前的 xml:langxml:space 範圍等資訊。

建構 XmlValidatingReader 物件時,也必須指定 XML 節點型別。XML 節點型別會決定資料將剖析為片段,還是剖析為格式正確的 XML 文件。下列表格列出節點型別以及剖析器所預期的資料型別。傳入任何其他 XmlNodeType 值都會擲回 ArgumentException

類別 片段內容

項目

任何有效的項目內容,包含項目、建議、處理說明、CDATA 和文字的合併。

XML 宣告也可產生為第一個節點。如此可讓您指定 XML 片段的編碼。

屬性

屬性的值。

文件

完整的 XML 文件內容。此型別會強制執行格式正確的 XML 文件規則。

會根據 EntityHandling 旗標來處理項目或屬性內容中所找到的實體參考。您可以使用 XmlParserContext 類別來傳遞用來解析實體的 DTD 資訊,並加入預設屬性。

如果 ValidationType 屬性設為 DTDAuto,且解析實體與加入預設屬性非常重要,則必須使用含有 PUBLIC 常值、SYSTEM 常值和內部 DTD 子集的 XmlParserContext 建構函式。對於所有其他驗證型別,則可提供不含 DTD 屬性的 XmlParserContext (例如結構描述)。任何用來驗證 XML 片段的結構描述,都必須加入至 XmlSchemaCollection,或直接在 XML 片段中參考。XmlParserContext 可用來提供剖析 XML 片段所需的命名空間解析、DTD 資訊等詳細資訊。

如果 ValidationType 屬性設為 DTD,且 XmlParserContext 不包含任何 DTD屬性,則會發生 ArgumentException

範例

下列程式碼範例使用 XmlValidatingReader 來讀取 XML 片段,並將它們寫入主控台。

Imports System
Imports System.Xml
 
Public Class Sample
  
   Overloads Public Shared Sub Main(args() As [String])
      Dim vr As New XmlValidatingReader("<element1> abc </element1>  <element2> qrt </element2> <?pi asldfjsd ?> <!-- comment -->", XmlNodeType.Element, Nothing)
      While vr.Read()
         Console.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name)
      End While
   End Sub
   ' Main
End Class
' Sample
using System;
using System.Xml;

public class Sample 
{
  public static void Main (String[] args) 
  {
  XmlValidatingReader vr = new XmlValidatingReader("<element1> abc </element1>  <element2> qrt </element2> <?pi asldfjsd ?> <!-- comment -->", XmlNodeType.Element, null);
        while(vr.Read())
    Console.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name);
   }
}

下列程式碼範例使用 XmlParserContext 來讀取 XML 片段,以從 XmlNamespaceManager 提供所需的命名空間。

Imports System
Imports System.IO
Imports System.Xml
 
Public Class Sample
   
   Public Shared Sub Main()
      
      Dim xmlFrag As String = "<book><bk:genre>&n;</bk:genre></book>"
      Dim nt As New NameTable()
      Dim nsmanager As New XmlNamespaceManager(nt)
      ' Add a default namespace.
      nsmanager.AddNamespace(String.Empty, "www.microsoft.com")
      nsmanager.AddNamespace("bk", "www.microsoft.com/books")
      Dim internalContent As String = "<!ENTITY n 'novel'>"
      Dim context As New XmlParserContext(nt, nsmanager, "elem", Nothing, Nothing, internalContent, String.Empty, String.Empty, XmlSpace.None)
      Dim r As New XmlValidatingReader(xmlFrag, XmlNodeType.Element, context)
      r.ValidationType = ValidationType.None
      r.EntityHandling = EntityHandling.ExpandEntities
      While r.Read()
         Console.WriteLine("{0},{1},{2}", r.NodeType, r.Name, r.Value)
      End While 
   End Sub
   ' Main
End Class
' Sample
using System;
using System.IO;
using System.Xml;

public class Sample 
{
  public static void Main()
  {

      string xmlFrag = "<book><bk:genre>&n;</bk:genre></book>";
      NameTable nt = new NameTable();
      XmlNamespaceManager nsmanager = new XmlNamespaceManager(nt);
     // Add a default namespace.
     nsmanager.AddNamespace (string.Empty, "www.microsoft.com");
     nsmanager.AddNamespace ("bk", "www.microsoft.com/books");
     string internalContent = "<!ENTITY n 'novel'>";
     XmlParserContext context = new XmlParserContext(nt, nsmanager, "elem",null, null, internalContent, string.Empty,
string.Empty, XmlSpace.None);
     XmlValidatingReader r = new XmlValidatingReader(xmlFrag, XmlNodeType.Element, context);
     r.ValidationType = ValidationType.None;
     r.EntityHandling = EntityHandling.ExpandEntities;
     while(r.Read())
        Console.WriteLine("{0},{1},{2}",r.NodeType, r.Name, r.Value);

  }
}

如果 ValidationType 屬性設為 DTD,則無法剖析片段,因為根據定義,必須載入整份文件,DTD 才能執行驗證。

請參閱

概念

使用 XmlReader 讀取 XML

其他資源

使用 XmlReader 類別