c# - 使用 C# 在 XML 中添加限定名称空间
问题描述
如何在 C# 中创建下面给出的 XML
<v1:Request ProductId="string" xmlns:v1="com/user/service/core/services/v1" xmlns:v11="com/user/ds/sch/pii/v1" xmlns:enum="com/uaer/schema/database/tcps/enumerations">
<v1:Name>string</v1:Name>
<v1:ID>string</v1:ID>
<v1:Code>string</v1:Code>
<v1:Key>string</v1:Key>
<v1:RequestKey>string</v1:RequestKey>
<v1:PartnerId>string</v1:PartnerId>
<v1:CustomerInfo>
<v1:Name>
<v11:Title>string</v11:Title>
<v11:Forename>string</v11:Forename>
<v11:Surname>string</v11:Surname>
<v11:Suffix>string</v11:Suffix>
</v1:Name>
<v1:Number>
<v11:Name>string</v11:Name>
<v11:Id>string</v11:Id>
</v1:Number>
</v1:Request>
我用来生成 XML 的代码片段是这样的,
[XmlRoot("Request")]
public class Request{
[XmlAttribute]
public string ProductId{get;set;}
[XmlElement("Name")]
public string Name{get;set;}
[XmlElement("ID")]
public string ID{get;set;}
[XmlElement("Code")]
public string Code{get;set;}
[XmlElement("Key")]
public string Key{get;set;}
[XmlElement("RequestKey")]
public string RequestKey{get;set;}
[XmlElement("PartnerId")]
public string PartnerId{get;set;}
[XmlElement("CustomerInfo")]
public CustomerInfo CustomerInfo= new CustomerInfo();
//this(CustomerInfo) is a class which contains the reference of NAME and NUMBER class.
//NAME and NUMBER class contains their respective properties.
}
我可以使用上面的代码生成这个 XML
<Request ProductId="string" xmlns:v1="com/user/service/core/services/v1" xmlns:v11="com/user/ds/sch/pii/v1" xmlns:enum="com/uaer/schema/database/tcps/enumerations">
<Name>string</Name>
<ID>string</ID>
<Code>string</Code>
<Key>string</Key>
<RequestKey>string</RequestKey>
<PartnerId>string</PartnerId>
<CustomerInfo>
<Name>
<Title>string</Title>
<Forename>string</Forename>
<Surname>string</Surname>
<Suffix>string</Suffix>
</Name>
<Number>
<Name>string</Name>
<Id>string</Id>
</Number>
</Request>
我正在使用 XmlSerializerNamespaces 添加命名空间我正在尝试使用 SOAP Api,我必须将 xml 作为请求传递。
解决方案
您可以通过将多个命名空间添加到 XML 属性来组合它们:
[XmlRoot("Request", Namespace = "com/user/service/core/services/v1")]
public class Request
{
[XmlAttribute]
public string ProductId { get; set; }
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("CustomerInfo")]
public CustomerInfo CustomerInfo = new CustomerInfo();
}
public class CustomerInfo
{
[XmlElement("Name")]
public Name Name { get; set; }
}
public class Name
{
[XmlElement("Title", Namespace = "com/user/ds/sch/pii/v1")]
public string Title { get; set; }
}
命名空间前缀提供给 XML 序列化程序:
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("v1", "com/user/service/core/services/v1");
ns.Add("v11", "com/user/ds/sch/pii/v1");
XmlSerializer xser = new XmlSerializer(typeof(Request));
xser.Serialize(Console.Out, new Request(), ns);
推荐阅读
- linux - plink.exe 在 ssh 会话中使用 Control-C
- sql - 如何在sql的while循环中的object_id语句中使用表名中的变量
- node.js - 使用 moment.js 解析迄今为止的年龄整数
- django - 不能对保存的表单使用 celery 延迟:对象不是 JSON 可序列化的
- r - 无法在 ADLA 中安装派对包 (R)
- angular - Angular 是在组件之间重用服务的好习惯
- android - 新:安装未成功完成。有关详细信息,请参阅 IDE 日志 - Android Studio
- java - 从 WebElement 中提取定位器并使用 pagefactory
- database - 在 HBase 中使用 where 条件实现 upsert
- quill - 给 uuid 以使用自定义印迹检查 Quill 编辑器中的列表项