在我的Web.sitemap中我有这个:
<?xml version="1.0" encoding="utf-8"?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="~/" title="Úvodní stránka">
<siteMapNode url="Pocitace" title="Počítače" />
<siteMapNode url="Elektronika" title="Elektronika" />
<siteMapNode url="Neco" title="Něco" />
</siteMapNode>
</siteMap>
我叫DeleteNode(“Něco”);
public static void DeleteNode(string title)
{
XmlDocument doc = LoadXmlDoc();
XmlElement node = FindNodeByTitle(doc, title);
node.ParentNode.RemoveChild(node);
SaveXmlDoc(doc);
}
private static XmlDocument LoadXmlDoc()
{
XmlDocument doc = new XmlDocument();
doc.Load(HttpContext.Current.Server.MapPath("../../Web.sitemap"));
return doc;
}
private static void SaveXmlDoc(XmlDocument doc)
{
string AbsPath = HttpContext.Current.Server.MapPath("../../Web.sitemap");
doc.Save(AbsPath);
}
private static XmlElement FindNodeByTitle(XmlDocument doc, string title)
{
string xPath = String.Format("//*[@title='{0}']", title);
XmlElement node = doc.SelectSingleNode(xPath) as XmlElement;
if(node == null)
throw new Exception("Node not found with title: " + title);
return node;
}
我没有得到任何错误,所以没关系,但在sitemap中没有删除节点,标题=“Něco”但始终是第一个节点,所以在sitemap中是这样的:
<?xml version="1.0" encoding="utf-8"?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="~/" title="Úvodní stránka">
<siteMapNode url="Elektronika" title="Elektronika" />
<siteMapNode url="Neco" title="Něco" />
</siteMapNode>
</siteMap>
你知道为什么吗?
答案 0 :(得分:2)
这个编译得很好。此外,在运行代码时,它会从文件中删除<siteMapNode url="Neco" title="Něco" />
行。{/ p>
无法看到您的问题; - )
副本n&#39;粘贴乐趣:
using System;
using System.Xml;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
DeleteNode("Něco");
}
public static void DeleteNode(string title)
{
XmlDocument doc = LoadXmlDoc();
XmlElement node = FindNodeByTitle(doc, title);
node.ParentNode.RemoveChild(node);
SaveXmlDoc(doc);
}
private static XmlDocument LoadXmlDoc()
{
XmlDocument doc = new XmlDocument();
doc.Load("C:\\test.xml");
return doc;
}
private static void SaveXmlDoc(XmlDocument doc)
{
string AbsPath = "C:\\test.xml";
doc.Save(AbsPath);
}
private static XmlElement FindNodeByTitle(XmlDocument doc, string title)
{
string xPath = String.Format("//*[@title='{0}']", title);
XmlElement node = doc.SelectSingleNode(xPath) as XmlElement;
if(node == null)
throw new Exception("Node not found with title: " + title);
return node;
}
}
}
同样在node.ParentNode.RemoveChild(node);
处设置断点时,我可以看到Neco节点已经找到 - 当然,因为它很容易被删除。
你知道我的想法吗?由于您在网络服务器上运行代码:检查您的编码!不能强调这一点。您的Neco可能返回错误,请确保您在任何地方使用UTF-8(http标头,文件,.sitemap文件中没有BOM)。
答案 1 :(得分:0)
这会编译吗?这条线看起来不像。
XmlElement node = doc.SelectSingleNode(xPath) as XmlElement;