0

有人可以帮我解决这个问题。我需要在 C# 中删除节点 "xsl:variable" ,如您所见,这里有两个带有子元素 xsl:variable 的 xsl:template 节点。在此示例中,我需要使用 C# 将其删除。

像这样的东西:

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

但我无法将 'xsl:variable' 的路径获取到 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>
4

2 回答 2

0

这是一个想法。我不确定在使用 SelectNodes 时是否需要“xsl”名称空间,您必须对此进行试验。

公共无效 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();

}

于 2012-04-09T19:52:58.593 回答
0

您需要传递SelectNodesSelectSingleNode定义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元素

于 2012-04-09T22:38:28.410 回答