我有以下XML
结构:
<?xml version="1.0" encoding="utf-8"?>
<Class>
<subjects>
</subjects>
<students>
<Name>klashf</Name>
<Name>lkashf</Name>
</students>
<marks>
<english>yes</english>
<math>yes</math>
</marks>
</Class>
现在,例如我想从中删除English
元素<english>yes</english>
。我怎样才能做到这一点?
我尝试过很多像下面这样的东西,但是我找不到去那个节点的方法。我试图构建一个到该节点的XPath但无法到达那里。可以告诉我那里的xPath应该是什么?
public bool RemoveTag(string userName, string tagName)
{
XmlDocument newDoc = new XmlDocument();
newDoc.Load(path);
XPathNavigator navigator = newDoc.CreateNavigator();
XPathExpression query = navigator.Compile("//marks");
query = navigator.Compile("//marks/" + tagName);
XmlNodeList marksNodes = newDoc.GetElementsByTagName("marks");
XmlNode nodeToDelete=marksNodes[0].SelectSingleNode(userName+"/marks/"+tagName);
for (int i = 0; i < marksNodes.Count; i++)
{
marksNodes[i].RemoveChild(nodeToDelete);
}
return status;
}
答案 0 :(得分:-1)
我更喜欢在XmlDocument上使用XDocument。 (使用System.Xml.Linq)
XDocument doc = XDocument.Load(path);
foreach(XElement elment in doc.Root.Descendants("english").ToArray())
elment.Remove();
这会删除元素的所有出现&#34; english&#34;无论他们的位置如何。
更精确的方法:
foreach(XElement markElement in doc.Root.Elements("marks"))
{
foreach(XElement englishElement in markElement.Elements("english").ToArray())
english.Remove();
}
这不涉及任何xpath,因此这是解决您问题的替代方案。