2012-11-22 7 views
34

sto cercando di chiamare SelectNode da XmlDocument classe e guai a causa di questo errore:Namespace Manager o XsltContext necessari. Questa query ha un prefisso, una variabile o funzione definita dall'utente

Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.

Il mio codice:

public void Add(ref XmlDocument xmlFormat, String strName) 
    { 
     XmlDocument dom; 
     XSLTemplate xsl = null; 
     String strPath = ""; 
     XmlNodeList nl; 
     XmlAttribute na; 
     int n; 

     nl = (XmlNodeList)xmlFormat.SelectNodes("//xsl:import/@href",nsm); 
    } 

e xsl :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:import href="stylesheets/r_adresetiket.xsl" /> 
    <xsl:template match="/"> 
     <xsl:call-template name="retouradres"> 
      <xsl:with-param name="_retouradres" select="data/adresetiket/_retouradres" /> 
      <xsl:with-param name="minofdir" select="data/adresetiket/afzendgegevens/afzendgegevens" /> 
      <xsl:with-param name="checked" select="data/adresetiket/LB" /> 
     </xsl:call-template> 
    </xsl:template> 
</xsl:stylesheet> 

risposta

41

È necessario aggiungere xsl namespace a XmlNamespaceManager:

var document = new XmlDocument(); 
document.Load(...); 
var nsmgr = new XmlNamespaceManager(document.NameTable); 
nsmgr.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform"); 

var nl = document.SelectNodes("//xsl:import/@href", nsmgr); 
+0

Grazie Ria suo lavoro –

+0

Grazie! Perfetto esempio per me, tutto funziona bene ora. – Andrew

2

so che è una vecchia questione ed è stato risposto, ma che potrebbe essere utile a qualcuno che vuole evitare di utilizzare XmlNamespaceManager. Il documento può essere attraversato da GetElementsByTagName ma ha bisogno di più attenzione, si dovrebbe già conosceva la struttura del xmlDocument:

var nodes = document.GetElementsByTagName("xsl:import"); 
var href = nodes[0].Attributes["href"];//be sure which node to take 
Problemi correlati