在以下代码段中,最后一个字符串"已删除"仍然有删除的元素。我首先转换为byte [],因为最终的实现输入将采用该形式。我正在循环通过已保存的节点并删除元素文档。是什么赋予了?所有的想法都非常感激。
static void Main(string[] args)
{
var str =
@"
<CustomerCareReport xmlns='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.FireEms' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
<OtherInformation>
<Documents xmlns:a='http://schemas.datacontract.org/2004/07/Foo.Bar.Frameworks.Reporting.Stack.Infrastructure.DataObjects.Documents'>
<a:Document>
<a:Contents>Z2dn</a:Contents>
<a:Description>yoyo</a:Description>
<a:Id>1</a:Id>
</a:Document>
<a:Document>
<a:Contents>ZmhmaA0KZmZmDQpmamZqZmpmDQo=</a:Contents>
<a:Description>test 2</a:Description>
<a:Id>2</a:Id>
</a:Document>
</Documents>
</OtherInformation>
</CustomerCareReport>
";
var element = XElement.Parse(str);
XNamespace ns = element.Name.Namespace;
// convert to bytes firstbecause final implementation input is byte array
byte[] bytes = Encoding.ASCII.GetBytes(str);
using (var stream = new MemoryStream(bytes))
{
var deleteMarked = new List<XElement>();
var xelement = XElement.Load(stream);
var docs = xelement
.Descendants(ns + "Documents");
foreach (XElement doc in docs.Descendants())
{
if (doc.Name.LocalName.Equals("Document"))
{
var delDoc = doc;
deleteMarked.Add(delDoc);
}
}
foreach (var deldoc in deleteMarked)
{
foreach (var node in deldoc.Elements())
{
node.Remove();
}
}
if (deleteMarked.Count > 0)
{
stream.Close();
bytes = stream.ToArray();
}
var removed = System.Text.Encoding.Default.GetString(bytes);
Console.WriteLine(removed);
}
}