我在重命名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.'
)搜索,但似乎没有一种解决方案适用于需要递归重命名的元素。
假设<Addresses>
是XML文档中的某些嵌套元素,并且某些上层节点将定义名称空间前缀xmlns:b="http://schemas.something.org/bla/07/WebServices.Stuff"
,则可以按如下所示修改XML: