Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ha egy XML-dokumentum memóriában van, a fogalmi ábrázolás egy fa. Programozáshoz objektumhierarchiával rendelkezik a fa csomópontjainak eléréséhez. Az alábbi példa bemutatja, hogyan lesz az XML-tartalom csomóponttá.
Amikor az XML beolvasásra kerül az XML-dokumentumobjektum-modellbe (DOM), a részek csomópontokká alakulnak, és ezek a csomópontok további metaadatokat őriznek meg önmagukról, például a csomóponttípusukat és az értékeiket. A csomóponttípus az objektuma, és ez határozza meg, hogy milyen műveleteket lehet végrehajtani, és milyen tulajdonságok állíthatók be vagy kérhetők le.
Ha a következő egyszerű XML-fájllal rendelkezik:
Bemenet
<book>
<title>The Handmaid's Tale</title>
</book>
A bemenet a memóriában a következő csomópontfaként jelenik meg a hozzárendelt csomóponttípus-tulajdonsággal:
Könyv- és címcsomópontfa-ábrázolás
Az book elem XmlElement objektummá válik, titlea következő elem pedig XmlElement objektummá, míg az elem tartalma XmlText objektummá válik. Az XmlElement metódusok és tulajdonságok megtekintésekor a metódusok és tulajdonságok eltérnek az XmlText objektumon elérhető metódusok és tulajdonságoktól. Ezért az XML-korrektúra csomóponttípusának ismerete létfontosságú, mivel a csomópont típusa határozza meg a végrehajtható műveleteket.
Az alábbi példa XML-adatokban olvas, és a csomópont típusától függően más szöveget ír ki. A következő XML-adatfájlt használja bemenetként, items.xml:
Bemenet
<?xml version="1.0"?>
<!-- This is a sample XML document -->
<!DOCTYPE Items [<!ENTITY number "123">]>
<Items>
<Item>Test with an entity: &number;</Item>
<Item>test with a child element <more/> stuff</Item>
<Item>test with a CDATA section <![CDATA[<456>]]> def</Item>
<Item>Test with a char entity: A</Item>
<!-- Fourteen chars in this element.-->
<Item>1234567890ABCD</Item>
</Items>
Az alábbi példakód beolvassa a items.xml fájlt, és megjeleníti az egyes csomóponttípusok adatait.
Imports System
Imports System.IO
Imports System.Xml
Public Class Sample
Private Const filename As String = "items.xml"
Public Shared Sub Main()
Dim reader As XmlTextReader = Nothing
Try
' Load the reader with the data file and
'ignore all white space nodes.
reader = New XmlTextReader(filename)
reader.WhitespaceHandling = WhitespaceHandling.None
' Parse the file and display each of the nodes.
While reader.Read()
Select Case reader.NodeType
Case XmlNodeType.Element
Console.Write("<{0}>", reader.Name)
Case XmlNodeType.Text
Console.Write(reader.Value)
Case XmlNodeType.CDATA
Console.Write("<![CDATA[{0}]]>", reader.Value)
Case XmlNodeType.ProcessingInstruction
Console.Write("<?{0} {1}?>", reader.Name, reader.Value)
Case XmlNodeType.Comment
Console.Write("<!--{0}-->", reader.Value)
Case XmlNodeType.XmlDeclaration
Console.Write("<?xml version='1.0'?>")
Case XmlNodeType.Document
Case XmlNodeType.DocumentType
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value)
Case XmlNodeType.EntityReference
Console.Write(reader.Name)
Case XmlNodeType.EndElement
Console.Write("</{0}>", reader.Name)
End Select
End While
Finally
If Not (reader Is Nothing) Then
reader.Close()
End If
End Try
End Sub 'Main ' End class
End Class 'Sample
using System;
using System.IO;
using System.Xml;
public class Sample
{
private const String filename = "items.xml";
public static void Main()
{
XmlTextReader reader = null;
try
{
// Load the reader with the data file and ignore
// all white space nodes.
reader = new XmlTextReader(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
// Parse the file and display each of the nodes.
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
Console.Write("<{0}>", reader.Name);
break;
case XmlNodeType.Text:
Console.Write(reader.Value);
break;
case XmlNodeType.CDATA:
Console.Write("<![CDATA[{0}]]>", reader.Value);
break;
case XmlNodeType.ProcessingInstruction:
Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
break;
case XmlNodeType.Comment:
Console.Write("<!--{0}-->", reader.Value);
break;
case XmlNodeType.XmlDeclaration:
Console.Write("<?xml version='1.0'?>");
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);
break;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
break;
case XmlNodeType.EndElement:
Console.Write("</{0}>", reader.Name);
break;
}
}
}
finally
{
if (reader != null)
reader.Close();
}
}
} // End class
A példa kimenete az adatok csomóponttípusokhoz való leképezését mutatja be.
Kimenet
<?xml version='1.0'?><!--This is a sample XML document --><!DOCTYPE Items [<!ENTITY number "123">]<Items><Item>Test with an entity: 123</Item><Item>test with a child element <more> stuff</Item><Item>test with a CDATA section <![CDATA[<456>]]> def</Item><Item>Test with a char entity: A</Item><--Fourteen chars in this element.--><Item>1234567890ABCD</Item></Items>
Ha egyszerre egy sorban adja meg a bemenetet, és a kódból generált kimenetet használja, az alábbi táblázat segítségével elemezheti, hogy melyik csomópontteszt milyen kimeneti sorokat hozott létre, és így megértheti, hogy milyen XML-adatok váltak csomóponttípussá.
| Bemenet | Kimenet | Csomóponttípus-teszt |
|---|---|---|
| <?xml version="1.0"?> | <?xml version='1.0'?> | XmlNodeType.XmlDeclaration |
| <-- Ez egy minta XML-dokumentum –> | <--A minta XML-dokumentum –> | XmlNodeType.Megjegyzés |
| <!DOCTYPE elemek [<!ENTITÁS "123" SZÁM>]> | <! DOCTYPE-elemek [<! "123"> ENTITÁSSZÁM] | XmlNodeType.DocumentType |
| <Elemek> | <Elemek> | XmlNodeType.Element |
| <Cikk> | <Cikk> | XmlNodeType.Element |
| Tesztelés egy entitással: &szám; | Tesztelés entitással: 123 | XmlNodeType.Text |
| </Cikk> | </Cikk> | XmlNodeType.EndElement |
| <Cikk> | <Cikk> | XmNodeType.Element |
| tesztelés gyermekelemekkel | tesztelés gyermekelemekkel | XmlNodeType.Text |
| <több> | <több> | XmlNodeType.Element |
| dolgok | dolgok | XmlNodeType.Text |
| </Cikk> | </Cikk> | XmlNodeType.EndElement |
| <Cikk> | <Cikk> | XmlNodeType.Element |
| tesztelés CDATA-szakaszsal | tesztelés CDATA-szakaszsal | XmlTest.Text |
| <! [CDATA[<456>]]> | <! [CDATA[<456>]]> | XmlTest.CDATA |
| Def | Def | XmlNodeType.Text |
| </Cikk> | </Cikk> | XmlNodeType.EndElement |
| <Cikk> | <Cikk> | XmlNodeType.Element |
| Tesztelés karakter entitással: A | Teszt egy karakter entitással: A | XmlNodeType.Text |
| </Cikk> | </Cikk> | XmlNodeType.EndElement |
| <-- 14 karakter ebben az elemben.--> | <--Ez az elem tizennégy karaktert tartalmaz.--> | XmlNodeType.Megjegyzés |
| <Cikk> | <Cikk> | XmlNodeType.Element |
| 1234567890ABCD | 1234567890ABCD | XmlNodeType.Text |
| </Cikk> | </Cikk> | XmlNodeType.EndElement |
| </Elemek> | </Elemek> | XmlNodeType.EndElement |
Tudnia kell, hogy milyen csomóponttípus van hozzárendelve, mivel a csomópont típusa határozza meg, hogy milyen típusú műveletek érvényesek, és milyen típusú tulajdonságokat állíthat be és kérdezhet le.
A szabad terület csomópontlétrehozásának vezérlése akkor történik, ha az adatokat a PreserveWhitespace jelölő tölti be a DOM-ba. További információt a DOM betöltésekor a Szabad terület és a Jelentős szabad terület kezelése című témakörben talál.
Ha új csomópontokat szeretne hozzáadni a DOM-hoz, olvassa el a Csomópontok beszúrása XML-dokumentumba című témakört. Csomópontok eltávolítása a DOM-ból: Csomópontok, tartalom és értékek eltávolítása XML-dokumentumból. Ha módosítani szeretné a csomópontok tartalmát a DOM-ban, olvassa el az XML-dokumentumok csomópontjainak, tartalmának és értékeinek módosítása című témakört.