У меня проблемы с переименованием имен элементов XML. Я пытаюсь добиться следующего.
Ввод:
<Addresses>
<AddressItem>
<AddressLine1>RZN850PXKYG</AddressLine1>
<AddressLine2>RYK57IT7Y9Z</AddressLine2>
<AddressType>Physical</AddressType>
<City>Some City</City>
<PostalCode>9999</PostalCode>
<Province>Some Province</Province>
<Suburb>Some Suburb</Suburb>
</AddressItem>
</Addresses>
Ожидаемый результат:
<b:Addresses>
<b:AddressItem>
<b:AddressLine1>RZN850PXKYG</b:AddressLine1>
<b:AddressLine2>RYK57IT7Y9Z</b:AddressLine1>
<b:AddressType>Physical</b:AddressType>
<b:City>Some City</b:City>
<b:PostalCode>9999</b:PostalCode>
<b:Province>Some Province</b:Province>
<b:Suburb>Some Suburb</b:Suburb>
</b:AddressItem>
</b:Addresses>
Ранее я успешно добавил атрибуты и переименовал элементы, используя что-то похожее на это:
var xmlDoc = XDocument.Parse(requestObj);
foreach (var element in xmlDoc.Descendants())
{
if (element.Name.LocalName.StartsWith("something"))
{
//example rename element
element.Name = "request";
XNamespace b = "http://schemas.something.org/bla/07/WebServices.Stuff";
XNamespace i = "http://www.w3.org/2001/XMLSchema-instance";
//set it's attributes
element.SetAttributeValue(XNamespace.Xmlns + "b", b);
element.SetAttributeValue(XNamespace.Xmlns + "i", i);
}
}
Я пытался достичь ожидаемого результата, просто используя приведенный ниже код, но двоеточие вызывает у меня проблемы:
foreach (var element in xmlDoc.Descendants())
{
element.Name = "b:" + element.Name;
}
Я искал, используя полученное сообщение об ошибке (System.Xml.XmlException: 'The ':' character, hexadecimal value 0x3A, cannot be included in a name.'
), но ни одно из решений не подходит для элементов, требующих рекурсивного переименования.