从 Xml 广告文件中删除整个节点?
Posted
技术标签:
【中文标题】从 Xml 广告文件中删除整个节点?【英文标题】:Delete a whole Node from an Xml Advertisement file? 【发布时间】:2012-12-24 07:34:18 【问题描述】:我正在尝试删除与某个条件匹配的整个 XmlNode
我的xml文件格式如下:
<?xml version="1.0" encoding="utf-8"?>
<Advertisements>
<Ad>
<ImageUrl>image/Hydrangeas.jpg</ImageUrl>
<NavigateUrl>www.google.com</NavigateUrl>
<AlternateText>nbfndbf</AlternateText>
<ID>0</ID>
<Impressions>1</Impressions>
</Ad>
</Advertisements>
我的删除代码:
XElement x =
new XElement("Ad",
new XElement("ImageUrl", lblImageURL.Text),
new XElement("NavigateUrl", lblImageURL.Text),
new XElement("AlternateText", lblAlternateText.Text),
new XElement("ID", lblID.Text),
new XElement("Impressions", lblfrequency.Text));
string filepath = Request.PhysicalApplicationPath.ToString() + "Adrotator.xml";
XmlDocument xD = new XmlDocument();
xD.LoadXml(x.ToString());
XmlNode xN = xD.FirstChild;
xN.ParentNode.RemoveChild(xN);
**xD.Save(filepath);**
我收到一个错误无效的 XML 文档。文档没有根元素。
【问题讨论】:
在哪里你的异常被抛出了?为什么要混合使用 LINQ to XML 和 XmlDocument? (不清楚为什么你加载一个文档只是为了忽略它......) 【参考方案1】:您可以使用 linq to xml 来实现此目的,例如如何删除 value ID = 0 的节点
var q = (from c in doc.Descendants("Advertisements")
from v in c.Elements("Ad")
where (int) v.Element("ID") == 0
select v).Remove();
这里是另一个使用 xpath 的例子
doc.XPathSelectElement("Advertisements/Ad[ID = 0]").Remove();
【讨论】:
我不能将整个 XElement 集合与我的 Xml 文件中已经存在的集合匹配吗? 你可以然后你必须在循环中运行上面的查询,用你的 xml 中的每个元素节点名称替换 ID CS0815:无法将 void 分配给隐式类型的局部变量我在此处收到此错误(来自 c in doc.Descendants("Advertisements") 我可以避免删除 标签,因为它也被删除了【参考方案2】:您使用以下代码创建一个新的 XDocument (doc):
XDocument doc = XDocument.Load(filepath);
Xml 文件中有什么东西(带有根元素)吗?另外,您似乎没有在代码中使用 doc,因此至少不需要。
【讨论】:
以上是关于从 Xml 广告文件中删除整个节点?的主要内容,如果未能解决你的问题,请参考以下文章