重命名XDocument元素名称

问题描述 投票:0回答:1

我在重命名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.')搜索,但似乎没有一种解决方案适用于需要递归重命名的元素。

c# xml xml-parsing
1个回答
0
投票

假设<Addresses>是XML文档中的某些嵌套元素,并且某些上层节点将定义名称空间前缀xmlns:b="http://schemas.something.org/bla/07/WebServices.Stuff",则可以按如下所示修改XML:

© www.soinside.com 2019 - 2024. All rights reserved.