次のxmlがあり、そこからLINQ to XMLを使用してすべての「xmlns」属性を削除しようとしています:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<LinearLayout xmlns="clr-namespace:AndroidAssembly;assembly=AndroidAssembly"/>
<TextView xmlns="clr-namespace:AndroidAssembly;assembly=AndroidAssembly">
</StackPanel>
</Window>
次のコードが使用されます。ドキュメント内の「xmlns」属性ごとに「attributesToRemove.Remove()」にヒットします。しかし、ドキュメントを保存すると、元の XML がまだ残っています。問題は何ですか?
var sr = new StringReader(richTextBoxOriginalXml.Text);
XDocument xdoc = XDocument.Load(sr);
foreach(var node in xdoc.Descendants().ToList())
{
var xmlns = node.Attributes().FirstOrDefault(a => a.Name == "xmlns");
if (xmlns !=null)
{
var attributesToRemove = node.Attributes("xmlns").ToList();
attributesToRemove.Remove();
}
}
var writer = new StringWriter();
var xmlWriter = new XmlTextWriter(writer);
xmlWriter.Formatting = Formatting.Indented;
xdoc.WriteTo(xmlWriter);
richTextBoxTransformed.Text = writer.GetStringBuilder().ToString();