求助删除XML中结点Sid为37的记录

maomaomaoaaa 2010-12-01 11:26:10
<?xml version="1.0" standalone="yes"?>
<NewDataSet xmlns="bagsinfo">
<bags>
<id>22</id>
<numid>44 </numid>
<marks>6</marks>
<weight>44</weight>
<size>44</size>
<piece>44</piece>
<vol>44</vol>
<pro>44</pro>
<maks> 医疗Y-44</maks>
<mokN>25</mokN>
</bags>
<equinfo>
<Sid>37</Sid>
<Name>555</Name>
<Type>555</Type>
<Amount>555</Amount>
<Unit>555</Unit>
<Bagid>5</Bagid>
<Intro>555</Intro>
<maks>22</maks>
<maksNo> 医疗Y-44</maksNo>
<mokN>0</mokN>
</equinfo>
<equinfo>
<Sid>38</Sid>
<Name>33</Name>
<Type>33</Type>
<Amount>33</Amount>
<Unit>33</Unit>
<Bagid>1</Bagid>
<Intro>33</Intro>
<maks>22</maks>
<maksNo> 医疗Y-44</maksNo>
<mokN>0</mokN>
</equinfo>
</NewDataSet>
...全文
163 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
myrroom 2010-12-01
  • 打赏
  • 举报
回复
XPath找到
然后删除
Save
maomaomaoaaa 2010-12-01
  • 打赏
  • 举报
回复
1楼的结点路径怎么找啊 2楼的能再给个c#的吗 麻烦各位了
maomaomaoaaa 2010-12-01
  • 打赏
  • 举报
回复
删除整个含有Sid=37的 equinfo结点及子结点
claymore1114 2010-12-01
  • 打赏
  • 举报
回复

XNamespace xn = "bagsinfo";
XElement xmlPage = XElement.Load("路径");
xmlPage.Descendants(xn + "Sid").Where(s => s.Value == "37").Remove();
//是删除 sid节点,还是 连父节点 也删除
//.Where(s => s.Value == "37").Select(s=>s.Parent).Remove()
xmlPage.Save("路径");
bloodish 2010-12-01
  • 打赏
  • 举报
回复
因为你指定了xml节点的namespace,查找稍微复杂一点

var doc = new XmlDocument();
doc.Load(@"c:\1.xml");
var nsMgr = new XmlNamespaceManager(doc.NameTable);
nsMgr.AddNamespace("bg", "bagsinfo");
var node = doc.DocumentElement.SelectSingleNode("bg:equinfo[bg:Sid=37]", nsMgr);
if (node != null)
{
doc.DocumentElement.RemoveChild(node);
}
doc.Save(@"c:\2.xml");
hitlcyu19 2010-12-01
  • 打赏
  • 举报
回复
claymore1114 2010-12-01
  • 打赏
  • 举报
回复
用.net3.5的 方便点

XNamespace xn = "bagsinfo";
XElement xmlPage = XElement.Load("../../xm1.xml");

xmlPage.Descendants(xn + "Sid").Where(s => s.Value == "37").Select(s=>s.Parent).Remove();
xmlPage.Save("../../xm1.xml");
saybookcat 2010-12-01
  • 打赏
  • 举报
回复
xe.ParentNode.RemoveAll();
改成 (xe.ParentNode).ParentNode.RemoveAll();


maomaomaoaaa 2010-12-01
  • 打赏
  • 举报
回复
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("xmlSave\\mok-25.xml"));

XmlNodeList xn = xmlDoc.GetElementsByTagName("Sid");
foreach (XmlNode cNode in xn)
{
XmlElement xe = (XmlElement)cNode;
if (xe.InnerText == "37")
{
xe.ParentNode.RemoveAll();
break;
}
}
xmlDoc.Save(Server.MapPath("xmlSave\\mok-26.xml"));

可以删除内容但是<equinfo></equinfo>删除不了
saybookcat 2010-12-01
  • 打赏
  • 举报
回复

public XmlDocument DeleteXmlNodeByInnerText(XmlDocument xmlDoc, string NodeName, string NodeValue)
{
XmlNodeList xn = objXmlDoc.GetElementsByTagName(NodeName);
foreach (XmlNode cNode in xn)
{
XmlElement xe = (XmlElement)cNode;
if (xe.InnerText == NodeValue)
{
xe.ParentNode.RemoveChild(cNode);
break;
}
}
return xmlDoc;
}
wuyq11 2010-12-01
  • 打赏
  • 举报
回复
带名称空间的 XML 的操作使用XmlNamespaceManager
System.Xml.XmlNamespaceManager nsmanager = new System.Xml.XmlNamespaceManager(doc.NameTable);
nsmanager.AddNamespace("","");
System.Xml.XmlNode node = doc.SelectSingleNode( "bg:equinfo[bg:Sid=37]", nsmanager);

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧