2012-04-09 4 views
-1

Не мог бы кто-нибудь помочь мне в этом. Мне нужно в C# удалить узел «xsl: variable», как вы можете видеть здесь два xsl: узлы шаблона с дочерними элементами xsl: variable. В этом примере мне нужно удалить его с помощью C#.C# XSLT удалить узел

Что-то вроде этого:

XmlDocument d = new XmlDocument(); 
d.Load("MyFileName.Xml"); 
XmlNode t = d.SelectSingleNode("/navigation/page[@id='1']"); 
t.ParentNode.RemoveChild(t); 
d.Save(); 

Но я не могу получить путь 'XSL: переменной' в d.SelectSingleNode()

Пожалуйста, помогите мне?

ЭТО XSLT:

<xsl:template name="Aggregate:RealECBooleanToXMLBoolean"> 
     <xsl:param name="RealECBoolean" select="/.."/> 
     <xsl:variable name="var1_result"> 
      <xsl:value-of select="($RealECBoolean = 'Yes')"/> 
      <xsl:value-of select="($RealECBoolean = 'YES')"/> 
      <xsl:value-of select="($RealECBoolean = 'X')"/> 
     </xsl:variable> 
     <xsl:variable name="var2_resultof_any" select="boolean(translate(normalize-space($var1_result), 'false0 ', ''))"/> 
     <xsl:choose> 
      <xsl:when test="string((string((string($var2_resultof_any) != 'false')) != 'false')) != 'false'"> 
       <xsl:value-of select="(string((string($var2_resultof_any) != 'false')) != 'false')"/> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="false()"/> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
    <xsl:template name="Aggregate:LookupRECodeName"> 
     <xsl:param name="RECode" select="/.."/> 
     <xsl:call-template name="vmf:vmf1_inputtoresult"> 
      <xsl:with-param name="input" select="$RECode"/> 
     </xsl:call-template> 
    </xsl:template> 
+0

Оно не может быть найти узел, так как «XSL:» Пространство имен не определен. Эта ссылка может помочь: http://stackoverflow.com/questions/443250/creating-a-specific-xml-document-using-namespaces-in-c-sharp – M3NTA7

+0

Thanks M3NTA7 У меня есть код для получения всего xsl: template но следующий шаг - удалить все дочерние xsl: переменные узлы, и я не могу сделать это с помощью этого образца. Нужно значение SingleNode. – Zire

ответ

0

Вы должны проходите мимо в SelectNodes или SelectSingleNode имени пространство менеджеров определение xsl префикса:

XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xDoc.NameTable); 
namespaceManager.AddNamespace("xsl" , "http://www.w3.org/1999/XSL/Transform"); 

и затем:

XmlNode variableNode = xDoc.SelectSingleNode("//xsl:variable", namespaceManager); 

будет выбрать первый элемент xsl:variable или

XmlNodeList variableNodes = xDoc.SelectNodes("//xsl:variable", namespaceManager); 

будут выбраны все элементы xsl:variable

0

Вот идея. Я не уверен, если вам понадобится пространство имен xsl при использовании SelectNodes, вам придется поэкспериментировать с этим.

общественный недействительный YouMethod() {

XmlDocument doc = new XmlDocument(); 
doc.Load("your.xsl"); 

XmlNode root = doc.DocumentElement; 

// iterate the template nodes 
foreach (XmlNode tNode in root.SelectNodes("//xsl:template")) 
{ 
    // iterate the variable child nodes 
    foreach (XmlNode vNode in tNode.SelectNodes("xsl:variable")) 
    { 
     tNode.RemoveChild(vNode); 
    } 
} 

doc.Save(); 

}

+0

Еще раз спасибо M3NTA7 Я вижу, что у меня проблема с root.SelectNodes ("// xsl: template")). Я пытался удалить xsl, но снова появилась ошибка. Я понял, что мне нужно XmlNamespaceManager namespaceManager = new XmlNamespaceManager (xDoc.NameTable); 'namespaceManager', а затем получил эту ошибку 'Префикс пространства имен' xsl 'не определен.' – Zire

+0

У вас все еще есть проблемы? Нам было бы полезно увидеть код. Таким образом, мы можем видеть, что вы пытаетесь. – M3NTA7

+0

Да, у меня есть проблема, возможно, я могу отправить вам xsl-файл? – Zire

Смежные вопросы