Attribútum- és névtércsomópont-navigáció az XPathNavigator használatával

Az XPathNavigator osztály két navigációs módszert biztosít, az első készlet, amely az XPathNavigator-alapú csomópontkészlet-navigáció témakörében található, egy vagy több XPathDocument objektum XmlDocument navigálására szolgál. A második készlet, amelyet ebben a témában ismertetünk, az attribútum- és névtércsomópontok navigálására szolgál XPathDocument vagy XmlDocument objektumokban.

Attribútumcsomópont navigációja

Az attribútumok egy elem tulajdonságai, nem pedig egy elem gyermekei. Ez a megkülönböztetés a testvér-, szülő- és gyermekcsomópontok közötti navigáláshoz használt osztály módszerei XPathNavigator miatt fontos.

Például a MoveToPrevious és MoveToNext metódusokat nem használják arra, hogy egy elemből egy attribútumra, vagy attribútumok között navigáljanak. Ehelyett az attribútumok különböző navigációs módszerekkel rendelkeznek.

Az osztály attribútumnavigációs módszerei az XPathNavigator alábbiak.

Ha az aktuális csomópont elem, a HasAttributes tulajdonsággal ellenőrizheti, hogy vannak-e attribútumok az elemhez társítva. Miután ismert, hogy egy elem rendelkezik attribútumokkal, több módszer is létezik az attribútumok elérésére. Ha egyetlen attribútumot szeretne lekérni az elemből, használja a metódust GetAttribute . Az XPathNavigator egy adott attribútumhoz történő áthelyezéséhez használja a MoveToAttribute metódust. Egy elem minden attribútumát át is iterálhatja a MoveToFirstAttribute metódus használatával, amelyet a metódus több hívása MoveToNextAttribute követ.

Megjegyzés:

Ha az XPathNavigator objektum egy attribútumon vagy névtércsomóponton van elhelyezve, a MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToIdMoveToNext és MoveToPrevious metódusok mindig visszatérnekfalse, és nincs hatással a XPathNavigatorhelyére. A kivételek a MoveTo, MoveToParent, és MoveToRoot metódusok.

Névtércsomópont navigációja

Minden elem rendelkezik névtércsomópontok egy-egy készletével, egy-egy különböző névtérelőtaggal, amely az elem hatókörében lévő névtér URI-éhez van kötve (beleértve a névtérhez http://www.w3.org/XML/1998/namespace kötött XML-előtagot is, amely minden XML-dokumentumban implicit módon deklarálva van), és egy az alapértelmezett névtérhez, ha az elem hatókörében van. Az elem az egyes névtércsomópontok szülője; a névtércsomópont azonban nem a szülőelem gyermekeleme.

Az attribútumokhoz hasonlóan a MoveToPrevious és MoveToNext metódusok nem használhatók arra, hogy az elemből a névtércsomópontba, vagy a névtércsomópontok között navigáljunk. Ehelyett a névtércsomópontok különböző navigációs módszerekkel rendelkeznek.

A(z) XPathNavigator osztály névtér-navigációs módszerei a következők.

Az XML-dokumentum bármely elemének hatókörében mindig van legalább egy névtércsomópont. Ez a névtércsomópont az előtaggal xml és a névtér URI-jával http://www.w3.org/XML/1998/namespace. Ha egy adott előtaggal rendelkező névtér URI-t szeretne lekérni a hatókörben, használja a metódust GetNamespace . Az XPathNavigator objektumot egy adott névtércsomópontra való áthelyezéséhez használja a MoveToNamespace metódust. Az elemhez tartozó hatókör névtércsomópontjain is iterálhat úgy, hogy a MoveToFirstNamespace metódust követően többször is meghívja a MoveToNextNamespace metódust.

Megjegyzés:

Ha az XPathNavigator objektum egy attribútumon vagy névtércsomóponton van elhelyezve, a MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToIdMoveToNext és MoveToPrevious metódusok mindig visszatérnekfalse, és nincs hatással a XPathNavigatorhelyére. A kivételek a MoveTo, MoveToParent, és MoveToRoot metódusok.

Az XPathNamespaceScope enumerálása

A névtércsomópontok navigálásakor az MoveToFirstNamespace és MoveToNextNamespace eljárások XPathNamespaceScope paraméterrel hívhatók meg. Ezek a metódusok másként viselkednek, mint a paraméterek nélkül hívott társaik. Az XPathNamespaceScope enumerálás értéke All, ExcludeXmlvagy Local.

Az alábbi példák azt mutatják be, hogy az XML-dokumentumban a különböző hatókörökben a MoveToFirstNamespace és MoveToNextNamespace metódusok milyen névtereket adnak vissza.

<root>
    <element1 xmlns="http://www.contoso.com" xmlns:books="http://www.contoso.com/books">
        <element2 />
    </element1>
</root>

A névtér sorozat a következő módon alakul: először a XPathNavigator metódus hívásának eredményeként, majd a MoveToFirstNamespace metódus következik, és végül egy sorozat MoveToNextNamespace metódushívás.

  • Ha a element2 pozíciójában található: xmlns:books="http://www.contoso.com/books", xmlns="http://www.contoso.com" és xmlns:xml="http://www.w3.org/XML/1998/namespace".

  • Ha a element1 pozíciójában található: xmlns:books="http://www.contoso.com/books", xmlns="http://www.contoso.com" és xmlns:xml="http://www.w3.org/XML/1998/namespace".

  • Ha van elhelyezve a következő helyen root: xmlns:xml="http://www.w3.org/XML/1998/namespace".

Megjegyzés:

Az XPathNavigator osztály fordított dokumentumsorrendben adja vissza a névtércsomópontokat. MoveToFirstNamespace Ezért lényegében az aktuális hatókör utolsó névtércsomópontjára lép.

Az alábbi példák bemutatják, hogy az XML-dokumentumban az MoveToFirstNamespace és MoveToNextNamespace metódusok milyen névtereket adnak vissza a XPathNamespaceScope enumeráció különböző hatóköreiben megadva.

<root xmlns="http://www.contoso.com" xmlns:a="http://www.contoso.com/a" xmlns:b="http://www.contoso.com/b">
    <child1 xmlns="" xmlns:a="urn:a">
        <child2 xmlns:c="urn:c" />
    </child1>
</root>

A helymeghatározáskor a child2 a névterek sorozata (az a névtér, amelyre a XPathNavigator állítódik a MoveToFirstNamespace metódus meghívása után, majd a MoveToNextNamespace metódus hívássorozata során) a következőképpen alakul.

  • All: xmlns:c="urn:c", xmlns:a="urn:a", xmlns="", xmlns:b="http://www.contoso.com/b"xmlns:a="http://www.contoso.com/a", xmlns="http://www.contoso.com"és xmlns:xml="http://www.w3.org/XML/1998/namespace".

  • ExcludeXml: xmlns:c="urn:c", xmlns:a="urn:a", xmlns=""xmlns:b="http://www.contoso.com/b", xmlns:a="http://www.contoso.com/a"és xmlns="http://www.contoso.com".

  • Local: xmlns:c="urn:c".

Megjegyzés:

Az XPathNavigator osztály fordított dokumentumsorrendben adja vissza a névtércsomópontokat. MoveToFirstNamespace Ezért lényegében az aktuális hatókör utolsó névtércsomópontjára lép.

Lásd még