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.
Az XPath-lekérdezések XML-dokumentumokkal való használatához helyesen kell kezelnie az XML-névtereket és a névterek által tartalmazott elemeket. A névterek megakadályozzák azokat a kétértelműségeket, amelyek akkor fordulhatnak elő, ha a neveket egynél több környezetben használják; A név ID például egy XML-dokumentum különböző elemeihez társított több azonosítóra is hivatkozhat. A névtér szintaxisa olyan URL-címeket, neveket és előtagokat határoz meg, amelyek megkülönböztetik az XML-dokumentum elemeit.
A jelen témakörben szereplő példa bemutatja, hogy az előtagok használata egy XML-dokumentummal XPathNavigatorvaló navigálás során. További információ a névterekről és a szintaxisról : XML-fájlok: Az XML-névterek ismertetése.
Névtér-deklarációk
A névtér-deklarációk megkülönböztethetővé és címezhetővé teszik az XML-dokumentumok elemeit, amikor egy példányt használunk XPathNavigator. A névtér-előtagok rövid szintaxist biztosítanak a névterek kezeléséhez.
Az előtagokat az űrlap határozza meg: <e:Envelope xmlns:e=http://schemas.xmlsoap.org/soap/envelope/>. Ebben a szintaxisban a "e" előtag a névtér formális URI-jának rövidítése. Az elemet a Body következő szintaxissal azonosíthatja a Envelope névtér tagjaként: e:Body.
A következő szakasz navigációs példájában response.xml hivatkozás történik a következő XML-dokumentumra.
<?xml version="1.0" encoding="utf-8" ?>
<e:Envelope xmlns:e="http://schemas.xmlsoap.org/soap/envelope/">
<e:Body>
<s:Search xmlns:s="http://schemas.microsoft.com/v1/Search">
<r:request xmlns:r="http://schemas.microsoft.com/v1/Search/metadata"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
</r:request>
</s:Search>
</e:Body>
</e:Envelope>
Navigáció névtérelőtag alapján
Az ebben a szakaszban szereplő kód a XPathNavigator és XmlNamespaceManager objektumokat használja, hogy kiválassza az előző szakaszban található XML-dokumentum Search elemét. A lekérdezés xpath névtérelőtagokat tartalmaz az elérési út egyes elemein. Az egyes elemeket tartalmazó névterek pontos identitásának megadása biztosítja az Search elemhez való helyes navigálást a SelectSingleNode módszerrel.
using (XmlReader reader = XmlReader.Create("response.xml"))
{
XPathDocument doc = new XPathDocument(reader);
XPathNavigator nav = doc.CreateNavigator();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nav.NameTable);
nsmgr.AddNamespace("e", @"http://schemas.xmlsoap.org/soap/envelope/");
nsmgr.AddNamespace("s", @"http://schemas.microsoft.com/v1/Search");
nsmgr.AddNamespace("r", @"http://schemas.microsoft.com/v1/Search/metadata");
nsmgr.AddNamespace("i", @"http://www.w3.org/2001/XMLSchema-instance");
string xpath = "/e:Envelope/e:Body/s:Search";
XPathNavigator element = nav.SelectSingleNode(xpath, nsmgr);
Console.WriteLine("Element Prefix:" + element.Prefix +
" Local name:" + element.LocalName);
Console.WriteLine("Namespace URI: " + element.NamespaceURI);
}
Teljes névterek és nevek pontos meghatározása több mint kényelmi szempont. Az előző példákban szereplő dokumentumdefinícióval és kóddal végzett kis kísérletezés ellenőrzi, hogy a teljes körűen minősített elemnevek nélküli navigáció kivételeket eredményez-e. Például az elemdefiníció: <Search xmlns="http://schemas.microsoft.com/v1/Search">, és a lekérdezés: sztring xpath = "/s:Envelope/s:Body/Search"; névtérelőtag nélkül az Search elem az null helyett Search-t ad vissza.