Hallo Leute,
ich bin C#-Anfanger. Ich habe ein Programm in C# programmiert. Das programm soll ne bestimmte Texte in XML-Dateien suchen und dann diese Text mit dem zugehörigen Parentnode löschen. Das Programm funktioniert aber es löscht nur erste Text, also wenn ich die gleiche Text 3 mal(z.B. (*$+EINS[Del]*) ) in einer XML datei habe, wird nur die erste Text gelöscht.
Im Anhang gibt es mein XML-Datei beispiel. Das programm sucht (*$+EINS[Del]*). Er Findet mehrere dann löscht nur die Parentnode (Zeilen nummer 415 bis 419 und 471 bis 475)
<Single Type="{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}" Method="IArchivable">
<Single Name="Id" Type="long">18</Single>
<Null Name="Tag" />
<Single Name="Text" Type="string">fbinst1();(*$+EINS[Del]*)</Single>
</Single>
und
<Single Type="{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}" Method="IArchivable">
<Single Name="Id" Type="long">8</Single>
<Null Name="Tag" />
<Single Name="Text" Type="string">fbinst1: Prozess1;(*$+EINS[Del]*)</Single>
</Single>
aber die anderen z.B die in zeilen 430 bis 334 oder 450 bis 454 löscht er nicht
wie kann ich diese problem löschen?
mein Code ist :
using System.Xml;
using System.Xml.XPath;
...
namespace TestapplikationPLC1
{
class csStructureText
{
private string _Path = string.Empty;
private XmlDocument OpenXmlDocument;
XmlDocument _doc = new XmlDocument();
public csStructureText(string strFilePath)
{
_Path = strFilePath;
OpenXmlFile(_Path);
DelFile(_doc.FirstChild);
CloseXmlFile();
}
public void OpenXmlFile(string XmlPath)
{
_doc.Load(XmlPath);
OpenXmlDocument = _doc;
}
public void DelFile(XmlNode _doc)
{
foreach (XmlNode node in _doc.ChildNodes)
{
if(node.NodeType == XmlNodeType.Text)
{
Console.WriteLine("node");
if (node.InnerText.Contains("(*$EINS[DEL]*)"))
{
node.ParentNode.ParentNode.ParentNode.RemoveChild(node.ParentNode.ParentNode);
}
}
if (node.HasChildNodes)
{
DelFile(node);
}
}
}
public void CloseXmlFile()
{
_doc.Save(@"D:\HMn\Desktop\lösung1.xml");
}
}
}
vielen Dank für eure hilfe
ich bin C#-Anfanger. Ich habe ein Programm in C# programmiert. Das programm soll ne bestimmte Texte in XML-Dateien suchen und dann diese Text mit dem zugehörigen Parentnode löschen. Das Programm funktioniert aber es löscht nur erste Text, also wenn ich die gleiche Text 3 mal(z.B. (*$+EINS[Del]*) ) in einer XML datei habe, wird nur die erste Text gelöscht.
Im Anhang gibt es mein XML-Datei beispiel. Das programm sucht (*$+EINS[Del]*). Er Findet mehrere dann löscht nur die Parentnode (Zeilen nummer 415 bis 419 und 471 bis 475)
<Single Type="{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}" Method="IArchivable">
<Single Name="Id" Type="long">18</Single>
<Null Name="Tag" />
<Single Name="Text" Type="string">fbinst1();(*$+EINS[Del]*)</Single>
</Single>
und
<Single Type="{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}" Method="IArchivable">
<Single Name="Id" Type="long">8</Single>
<Null Name="Tag" />
<Single Name="Text" Type="string">fbinst1: Prozess1;(*$+EINS[Del]*)</Single>
</Single>
aber die anderen z.B die in zeilen 430 bis 334 oder 450 bis 454 löscht er nicht
wie kann ich diese problem löschen?
mein Code ist :
using System.Xml;
using System.Xml.XPath;
...
namespace TestapplikationPLC1
{
class csStructureText
{
private string _Path = string.Empty;
private XmlDocument OpenXmlDocument;
XmlDocument _doc = new XmlDocument();
public csStructureText(string strFilePath)
{
_Path = strFilePath;
OpenXmlFile(_Path);
DelFile(_doc.FirstChild);
CloseXmlFile();
}
public void OpenXmlFile(string XmlPath)
{
_doc.Load(XmlPath);
OpenXmlDocument = _doc;
}
public void DelFile(XmlNode _doc)
{
foreach (XmlNode node in _doc.ChildNodes)
{
if(node.NodeType == XmlNodeType.Text)
{
Console.WriteLine("node");
if (node.InnerText.Contains("(*$EINS[DEL]*)"))
{
node.ParentNode.ParentNode.ParentNode.RemoveChild(node.ParentNode.ParentNode);
}
}
if (node.HasChildNodes)
{
DelFile(node);
}
}
}
public void CloseXmlFile()
{
_doc.Save(@"D:\HMn\Desktop\lösung1.xml");
}
}
}
vielen Dank für eure hilfe