あなたはXmlNode.RemoveChild
メソッドを使用する必要がありますが、あなたが削除しようとしている、またはあなたが例外を取得するノードの親にそれを適用する場合にのみ動作することに注意してください:
削除されるノードはこのノードの子ノードではない
removing nodes from an XmlDocumentで説明されている。
RemoveNode
は、a simple XML exampleに基づいています。
オリジナルトラフィックパターン:
ラジアル:001、距離:0.36、緯度:(48、31.7363644)、経度:(11、
public sealed class TestXmlNodeRemoval
{
public static void RemoveNode()
{
var xmlDocument = new XmlDocument();
var xmlTrafficPattern = xmlDocument.CreateElement("TrafficPattern");
xmlDocument.AppendChild(xmlTrafficPattern);
xmlTrafficPattern.AppendChild(CreateWayPoint(xmlDocument,
"001", "0.36", "48", "31.7363644", "11", "57.53425"));
xmlTrafficPattern.AppendChild(CreateWayPoint(xmlDocument,
"090", "0.56", "48", "31.7363644", "11", "57.53425"));
xmlTrafficPattern.AppendChild(CreateWayPoint(xmlDocument,
"240", "0.56", "48", "31.7363644", "11", "57.53425"));
xmlTrafficPattern.AppendChild(CreateWayPoint(xmlDocument,
"346", "0.56", "48", "31.7363644", "11", "57.53425"));
Console.WriteLine(@"Original traffic pattern:");
DisplayXmlDocument(xmlDocument);
// create an arbitrary criterion to remove an element
const string radialToRemove = @"090";
Console.WriteLine(@"Remove node with radial=" + radialToRemove);
if (xmlDocument.DocumentElement != null)
{
for (var i = 0; i < xmlDocument.DocumentElement.ChildNodes.Count; ++i)
{
var radial =
xmlDocument.DocumentElement.ChildNodes[i].SelectSingleNode("Radial");
if (radial == null || (radial.InnerText != radialToRemove))
{
continue;
}
var nodeToRemove = xmlDocument.DocumentElement.ChildNodes[i];
// note that you need to remove node from the Parent
if (nodeToRemove.ParentNode != null)
{
nodeToRemove.ParentNode.RemoveChild(nodeToRemove);
}
break;
}
}
Console.WriteLine(@"New traffic pattern:");
DisplayXmlDocument(xmlDocument);
}
}
この上記方法は、以下の出力を生成します57.53425)
ラジアル:090、距離:0.56、緯度:(48、31.7363644)、経度(11 57.53425)
ラジアル:2 40、距離:0.56、緯度:(48、31.7363644)、経度(11 57.53425)
ラジアル:346、距離:0.56、緯度:(48、31.7363644)、経度(11 57.53425)
ラジアル:001、距離:0.36、緯度:(48、31.7363644)、経度(11 57.53425)
ラジアル:240半径= 090
新しいトラフィックパターンと
削除ノード、距離:0.56、緯度:(48,31.7363644)、経度:(11,57.53425)
ラジアル:346、距離:0.56、緯度:(48、31.7363644)、経度(11 57.53425)
Iを使用支持方法を以下にコピーされます。
最初の方法はウェイポイントを作成するので、上記のコードはあまりうまくいきません。簡単にするために、すべてがstring
だが、私はおそらくより良いパラメータの型
private static XmlElement CreateWayPoint(XmlDocument xmlDoc,
string radial,
string distance,
string latDegrees,
string latMinutes,
string longDegrees,
string longMinutes)
{
var xmlWayPoint = xmlDoc.CreateElement("WayPoint");
var xmlRadial = xmlDoc.CreateElement("Radial");
xmlRadial.InnerText = radial;
xmlWayPoint.AppendChild(xmlRadial);
var xmlDistance = xmlDoc.CreateElement("Distance");
xmlDistance.InnerText = distance;
xmlWayPoint.AppendChild(xmlDistance);
var xmlLatitude = xmlDoc.CreateElement("Latitude");
var xmlLatDegrees = xmlDoc.CreateElement("Degrees");
xmlLatDegrees.InnerText = latDegrees;
xmlLatitude.AppendChild(xmlLatDegrees);
var xmlLatMinutes = xmlDoc.CreateElement("Minutes");
xmlLatMinutes.InnerText = latMinutes;
xmlLatitude.AppendChild(xmlLatMinutes);
xmlWayPoint.AppendChild(xmlLatitude);
var xmlLongitude = xmlDoc.CreateElement("Longitude");
var xmlLongDegrees = xmlDoc.CreateElement("Degrees");
xmlLongDegrees.InnerText = longDegrees;
xmlLongitude.AppendChild(xmlLongDegrees);
var xmlLongMinutes = xmlDoc.CreateElement("Minutes");
xmlLongMinutes.InnerText = longMinutes;
xmlLongitude.AppendChild(xmlLongMinutes);
xmlWayPoint.AppendChild(xmlLongitude);
return xmlWayPoint;
}
を選ぶだろうと、このメソッドは、XMLドキュメントを表示します。
private static void DisplayXmlDocument(XmlNode xmlDoc)
{
var wayPoints = xmlDoc.SelectNodes("TrafficPattern/WayPoint");
if (wayPoints == null)
{
return;
}
foreach (XmlNode wayPoint in wayPoints)
{
var radial = wayPoint.SelectSingleNode("Radial");
var distance = wayPoint.SelectSingleNode("Distance");
var latitudeDegrees = wayPoint.SelectSingleNode("Latitude/Degrees");
var latitudeMinutes = wayPoint.SelectSingleNode("Latitude/Minutes");
var longitudeDegrees = wayPoint.SelectSingleNode("Longitude/Degrees");
var longitudeMinutes = wayPoint.SelectSingleNode("Longitude/Minutes");
if (radial != null &&
distance != null &&
latitudeDegrees != null &&
latitudeMinutes != null &&
longitudeDegrees != null &&
longitudeMinutes != null)
{
Console.WriteLine(string.Format("Radial:{0},
Distance:{1},
Latitude:({2}, {3}),
Longitude:({4}, {5})",
radial.InnerText,
distance.InnerText,
latitudeDegrees.InnerText,
latitudeMinutes.InnerText,
longitudeDegrees.InnerText,
longitudeMinutes.InnerText));
}
}
}