【问题标题】:Adding Qualified NameSpace in XML using C#使用 C# 在 XML 中添加限定名称空间
【发布时间】:2018-11-08 22:35:54
【问题描述】:

如何在 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 的代码 sn-p 是这样的,

         [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 作为请求传递。

【问题讨论】:

  • Lennart 这不是我想要的,在我的 xml 子节点中也有 v11 命名空间,例如:string string stringstring

标签: c# asp.net .net xml


【解决方案1】:

您可以通过将多个命名空间添加到 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);

【讨论】:

    猜你喜欢
    • 2019-07-10
    • 1970-01-01
    • 2011-01-02
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2019-01-02
    相关资源
    最近更新 更多