Что ж, XmlReader работает только вперед, поэтому найти комбинацию пространств имен в любом месте, чтобы поместить их в корень, сложно с помощью комбинации XmlReader / Writer.Однако вы можете попробовать LINQ to XML, когда я запускаю код (.NET 4.0)
XDocument feed = XDocument.Load(@"input.xml");
feed.Root.Descendants().Attributes().Where(a => a.IsNamespaceDeclaration && feed.Root.Attributes().Any(a2 => a.Value == a2.Value)).Remove();
feed.Save(Console.Out, SaveOptions.OmitDuplicateNamespaces);
на примере ввода
<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:a="http://www.w3.org/2005/Atom/extensions/property" a:length="1">
<title type="text">Search Results: '80706'</title>
<subtitle type="text">search results</subtitle>
<id>80706</id>
<updated>2011-08-30T09:05:21+02:00</updated>
<author>
<name>XXXXXX</name>
<uri>contact@xxxx</uri>
<email>contact@xxxx.com</email>
</author>
<entry>
<id>8000</id>
<title type="text">Investment 0000000</title>
<summary type="text">pre populated form</summary>
<published>2011-08-30T14:57:45Z</published>
<updated>2011-08-30T09:05:21+02:00</updated>
<content type="application/xml">
<prop:query-result xmlns:prop="http://www.w3.org/2005/Atom/extensions/property" xmlns="http://www.w3.org/2005/Atom/extensions/property">
<prop:PartyId>000000</prop:PartyId>
<prop:IDReferenceNumber>000000</prop:IDReferenceNumber>
<prop:FullName></prop:FullName>
<prop:FirstName>FIRST</prop:FirstName>
<prop:LastName>LAST</prop:LastName>
<prop:Title>Mr</prop:Title>
<prop:BirthDate>1967-05-24T00:00:00</prop:BirthDate>
<prop:PartySystemKey source="Number">000000</prop:PartySystemKey>
<prop:Address type="Mailing">BOX ...</prop:Address>
<prop:Address type="Home">39 ...</prop:Address>
<prop:ContactNumber>0000000</prop:ContactNumber>
<prop:InvestmentNumber source="ContractNumber">0000000</prop:InvestmentNumber>
<prop:InvestmentNumber source="AccountNumber">0000000</prop:InvestmentNumber>
</prop:query-result>
</content>
</entry>
</feed>
Я получаю вывод
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:a="http://www.w3.org/2005/Atom/extensions/property" a:length="1">
<title type="text">Search Results: '80706'</title>
<subtitle type="text">search results</subtitle>
<id>80706</id>
<updated>2011-08-30T09:05:21+02:00</updated>
<author>
<name>XXXXXX</name>
<uri>contact@xxxx</uri>
<email>contact@xxxx.com</email>
</author>
<entry>
<id>8000</id>
<title type="text">Investment 0000000</title>
<summary type="text">pre populated form</summary>
<published>2011-08-30T14:57:45Z</published>
<updated>2011-08-30T09:05:21+02:00</updated>
<content type="application/xml">
<a:query-result>
<a:PartyId>000000</a:PartyId>
<a:IDReferenceNumber>000000</a:IDReferenceNumber>
<a:FullName></a:FullName>
<a:FirstName>FIRST</a:FirstName>
<a:LastName>LAST</a:LastName>
<a:Title>Mr</a:Title>
<a:BirthDate>1967-05-24T00:00:00</a:BirthDate>
<a:PartySystemKey source="Number">000000</a:PartySystemKey>
<a:Address type="Mailing">BOX ...</a:Address>
<a:Address type="Home">39 ...</a:Address>
<a:ContactNumber>0000000</a:ContactNumber>
<a:InvestmentNumber source="ContractNumber">0000000</a:InvestmentNumber>
<a:InvestmentNumber source="AccountNumber">0000000</a:InvestmentNumber>
</a:query-result>
</content>
</entry>
</feed>
Этого достаточно?Вы не сказали, какой результат вы хотите получить, и есть ли варианты ввода, в которых пространства имен используются на некоторых уровнях, которые не были объявлены ранее, и которые необходимо поднять.В вашем текущем примере достаточно просто удалить дублированные объявления пространства имен.