2012-11-10 2 views
5

Qualcuno può fornire un esempio di utilizzo della funzione XmlDocument.SelectSingleNodeNS per WinRT? Non sono chiaro cosa si aspetta il secondo parametro e non riesco a trovare un esempio.Quale formato è previsto dal parametro namespace in SelectSingleNodeNS

public IXmlNode SelectSingleNodeNS(
    string xpath, 
    object namespaces 
) 

Contains a string that specifies the namespaces to use in XPath expressions when it is necessary to define new namespaces externally. Namespaces are defined in the XML style, as a space-separated list of namespace declaration attributes. You can use this property to set the default namespace as well.

+0

No, non ci sono penalità per le prestazioni. Date un'occhiata a questo [risposta] [1] [1]: http://stackoverflow.com/questions/256859/is-there-a-performance-difference-between-a -for-loop-and-a-per-each-loop –

risposta

8

Il parametro namespace è ovviamente solo una stringa (anche se dichiarato come oggetto) che deve contenere una dichiarazione di namespace XML nel formato "xmlns: aliasname = 'namespace'" (lo stile XML). Ad esempio

xmlDocument.DocumentElement.SelectNodesNS("cb:person", 
    "xmlns:cb='http://www.addison-wesley.de/codebook'"); 

opere con un documento XML come questo:

<?xml version="1.0" encoding="utf-8" ?> 
<persons xmlns="http://www.addison-wesley.de/codebook"> 
    <person id="1000"> 
    <firstname>Zaphod</firstname> 
    <lastname>Beeblebrox</lastname> 
    <type>Alien</type> 
    </person> 
... 
</persons> 

Nota che l'alias (cb :) è stata utilizzata nel XPath.

Se lo spazio dei nomi non è nello stile XML, si ottiene il famigerato errore COM E_Fail.

L'(scarso) la documentazione di SelectNodesNS dice: "Contiene una stringa che specifica gli spazi dei nomi per l'uso in espressioni XPath quando è necessario definire nuovi spazi dei nomi esternamente namespace sono definite in stile XML, come un elenco separato da spazi. degli attributi di dichiarazione dello spazio dei nomi. Puoi usare questa proprietà anche per impostare lo spazio dei nomi predefinito. "

Secondo tale spazio dei nomi deve essere una stringa e potrebbe contenere più di uno spazio dei nomi XML (non ancora provato). Ancora la domanda è aperta perché è un oggetto.

+0

Ho letto MSDN "contiene una stringa" e ho assunto che il parametro fosse una specie di oggetto complesso, o array, o qualcosa, che aveva un elemento dell'array o una proprietà di alcuni non documentati nome, che era di tipo stringa, che aveva l'URI dello spazio dei nomi. Che incubo; mi ci è voluta un'ora di googling per capire cosa farsene, ma la tua risposta eccellente è stata questa. Grazie. –

+0

Posso collegarmi qui e chiederti se sei riuscito a utilizzare la funzione xpath 2.0 come xs: data con codice XML WinRT? Sto ottenendo: '0x80004005 - Errore di runtime JavaScript: metodo sconosciuto. // CatalogItem [@ code = '101'and -> xs: date (' 2011-09-22T00: 00: 00.000Z ') <- ge xs: date (@validFrom) e xs: date (' 2011-09-22T00: 00: 00.000Z ') le xs: date (@validTo)] ' – philk