Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XmlWriter的具有名称空间的XML_C#_Xml - Fatal编程技术网

C# 使用XmlWriter的具有名称空间的XML

C# 使用XmlWriter的具有名称空间的XML,c#,xml,C#,Xml,我正在用c#创建一个XML文档。 我想通过XmlWriter创建此输出。但我无法得到确切的输出 这就是我需要生成的内容: <ITRETURN:ITR xmlns:ITRETURN="http://incometaxindiaefiling.gov.in/main" xmlns:ITR1FORM="http://incometaxindiaefiling.gov.in/ITR1" xmlns:ITRForm="http://incometaxindiaefiling.gov.in/maste

我正在用c#创建一个XML文档。 我想通过
XmlWriter
创建此输出。但我无法得到确切的输出

这就是我需要生成的内容:

<ITRETURN:ITR xmlns:ITRETURN="http://incometaxindiaefiling.gov.in/main" xmlns:ITR1FORM="http://incometaxindiaefiling.gov.in/ITR1" xmlns:ITRForm="http://incometaxindiaefiling.gov.in/master" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <ITR1FORM:ITR1>
  <ITRForm:CreationInfo>
   <ITRForm:SWVersionNo>R1</ITRForm:SWVersionNo>
   <ITRForm:SWCreatedBy>SW92201920</ITRForm:SWCreatedBy>
   <ITRForm:XMLCreatedBy>SW92201920</ITRForm:XMLCreatedBy>
   <ITRForm:XMLCreationDate>2019-07-19</ITRForm:XMLCreationDate>
   <ITRForm:IntermediaryCity>Delhi</ITRForm:IntermediaryCity>
   <ITRForm:Digest>lOa90+jndV+RYN0ghOemod4eomQDqsSm6tw3w8XWsZQ= </ITRForm:Digest>
  </ITRForm:CreationInfo>
 </ITR1FORM:ITR1>
</ITRETURN:ITR>

R1
SW92201920
SW92201920
2019-07-19
德里
lOa90+jndV+RYN0ghOemod4eomQDqsSm6tw3w8XWsZQ=

如何使用
XmlWriter
生成该XML?

您可以使用以下代码编写该XML:

// Namespace constants
var ITRETURN = @"http://incometaxindiaefiling.gov.in/main";
var ITR1FORM = @"http://incometaxindiaefiling.gov.in/ITR1";
var ITRForm = @"http://incometaxindiaefiling.gov.in/master";
var xsi = @"http://www.w3.org/2001/XMLSchema-instance";

// Enable indenting and disable the XML declaration.
var settings = new XmlWriterSettings
{
    Indent = true,
    IndentChars = " ",
    OmitXmlDeclaration  = true,
};
using (var xmlWriter = XmlWriter.Create(textWriter, settings))
{
    // Write the start element and all namespaces.
    xmlWriter.WriteStartElement("ITRETURN", "ITR", ITRETURN);
    xmlWriter.WriteAttributeString("xmlns","ITRETURN", null, ITRETURN);
    xmlWriter.WriteAttributeString("xmlns","ITR1FORM", null, ITR1FORM);
    xmlWriter.WriteAttributeString("xmlns","ITRForm", null, ITRForm);
    xmlWriter.WriteAttributeString("xmlns","xsi", null, xsi);

    // Write the ITR1 element
    xmlWriter.WriteStartElement("ITR1", ITR1FORM);

    // Write the CreationInfo
    xmlWriter.WriteStartElement("CreationInfo", ITRForm);
    xmlWriter.WriteElementString("SWVersionNo", ITRForm, "R1");             
    xmlWriter.WriteElementString("SWCreatedBy", ITRForm, "SW92201920");             
    xmlWriter.WriteElementString("XMLCreatedBy", ITRForm, "SW92201920");                
    xmlWriter.WriteElementString("XMLCreationDate", ITRForm, "2019-07-19");             
    xmlWriter.WriteElementString("IntermediaryCity", ITRForm, "Delhi");             
    xmlWriter.WriteElementString("Digest", ITRForm, "lOa90+jndV+RYN0ghOemod4eomQDqsSm6tw3w8XWsZQ= ");               
    xmlWriter.WriteEndElement(); // CreationInfo

    xmlWriter.WriteEndElement(); // ITR1

    xmlWriter.WriteEndElement(); // ITR
}
注:

  • 在上面的代码
    textWriter
    中,有一些
    StreamWriter
    StringWriter
    正在写入XML

  • 使用指定名称空间中的元素直接编写XML时,通常应避免对名称空间前缀进行硬编码。相反,请使用采用本地名称和完整命名空间的方法,如或

  • 如果确实需要对某些前缀进行硬编码,请参阅至,以了解如何编写必要属性的说明。您还需要为声明名称空间的元素(这里是根元素)手动编写前缀。但是,一旦定义了前缀,所有子元素都将自动拾取它们

    (不必硬编码前缀。只要接收系统正确解析XML名称空间,使用的前缀就不重要。当然,并非所有接收系统都正确解析XML…)

  • 我缩进了XML,省略了XML声明,如您的问题所示

  • 如果生产代码中的
    Digest
    实际上是一个字节数组,则可以使用Base64轻松地将其写出


演示小提琴。

你得到了什么?请分享你所做的代码和收到的结果。