2012-11-22 31 views
34

मैं इस त्रुटि के कारण XmlDocument वर्ग और मुसीबत से SelectNode कॉल करने के लिए कोशिश कर रहा हूँ:नेमस्पेस प्रबंधक या XsltContext की आवश्यकता है। इस क्वेरी एक उपसर्ग, चर है, या उपयोगकर्ता परिभाषित समारोह

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

मेरे कोड:

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); 
    } 

और 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> 

उत्तर

41

आप XmlNamespaceManager को xsl नाम स्थान जोड़ने के लिए:

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

धन्यवाद रिया अपने कार्य –

+0

धन्यवाद: दस्तावेज़ GetElementsByTagName द्वारा पार किया जा सकता है लेकिन इसे और अधिक ध्यान देने की जरूरत है, तो आप पहले से ही अपने XmlDocument की संरचना के बारे में पता था चाहिए! मेरे लिए बिल्कुल सही उदाहरण, अब सब ठीक काम कर रहे हैं। – Andrew

2

मैं जानता हूँ कि यह एक पुराने सवाल है और जवाब दिया गया है, लेकिन यह कोई है जो XmlNamespaceManager का उपयोग कर से बचने के लिए चाहता है के लिए उपयोगी हो सकता है।

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