You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C# XmlWriter生成指定命名空间的目标XML文档

使用C# XmlWriter生成指定命名空间的XML文档

嗨,我来帮你搞定这个问题!你遇到的核心问题应该是XML命名空间和元素前缀的处理,只要正确配置XmlWriter并按层级写入元素,就能精准生成你要的格式。

首先,先明确你需要生成的目标XML:

<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>

下面是完整的C#代码实现,直接运行就能得到你要的结果:

using System;
using System.Xml;

class XmlGenerator
{
    static void Main()
    {
        // 配置XmlWriter的输出格式,开启缩进并去掉默认的XML声明
        XmlWriterSettings writerSettings = new XmlWriterSettings
        {
            Indent = true,
            OmitXmlDeclaration = true,
            IndentChars = "  ", // 用两个空格缩进,和目标格式对齐
            NewLineOnAttributes = false // 保持属性在同一行
        };

        // 这里用Console.Out输出,你也可以换成文件路径写入到本地文件
        using (XmlWriter writer = XmlWriter.Create(Console.Out, writerSettings))
        {
            // 写入根元素,同时指定命名空间前缀和URI
            writer.WriteStartElement("ITRETURN", "ITR", "http://incometaxindiaefiling.gov.in/main");
            
            // 声明其他需要的命名空间前缀
            writer.WriteAttributeString("xmlns", "ITR1FORM", null, "http://incometaxindiaefiling.gov.in/ITR1");
            writer.WriteAttributeString("xmlns", "ITRForm", null, "http://incometaxindiaefiling.gov.in/master");
            writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");

            // 写入ITR1FORM:ITR1元素
            writer.WriteStartElement("ITR1FORM", "ITR1", "http://incometaxindiaefiling.gov.in/ITR1");

            // 写入ITRForm:CreationInfo元素
            writer.WriteStartElement("ITRForm", "CreationInfo", "http://incometaxindiaefiling.gov.in/master");

            // 依次写入CreationInfo下的所有子元素
            writer.WriteElementString("ITRForm", "SWVersionNo", "http://incometaxindiaefiling.gov.in/master", "R1");
            writer.WriteElementString("ITRForm", "SWCreatedBy", "http://incometaxindiaefiling.gov.in/master", "SW92201920");
            writer.WriteElementString("ITRForm", "XMLCreatedBy", "http://incometaxindiaefiling.gov.in/master", "SW92201920");
            writer.WriteElementString("ITRForm", "XMLCreationDate", "http://incometaxindiaefiling.gov.in/master", "2019-07-19");
            writer.WriteElementString("ITRForm", "IntermediaryCity", "http://incometaxindiaefiling.gov.in/master", "Delhi");
            writer.WriteElementString("ITRForm", "Digest", "http://incometaxindiaefiling.gov.in/master", "lOa90+jndV+RYN0ghOemod4eomQDqsSm6tw3w8XWsZQ= ");

            // 关闭所有嵌套的元素,顺序要和打开的顺序相反
            writer.WriteEndElement(); // 关闭CreationInfo
            writer.WriteEndElement(); // 关闭ITR1
            writer.WriteEndElement(); // 关闭根元素ITR
        }
    }
}

关键要点说明:

  • XmlWriterSettings配置:通过OmitXmlDeclaration = true去掉默认的<?xml version="1.0" encoding="utf-8"?>声明,Indent = true让输出格式更清晰,和目标XML一致。
  • 命名空间处理:每个元素在写入时都要明确指定前缀和对应的命名空间URI,这样XmlWriter才会正确生成带前缀的元素;根元素的其他命名空间前缀需要用WriteAttributeString手动声明。
  • 元素层级:严格按照目标XML的嵌套层级,打开元素后要按顺序关闭,避免结构错误。

内容的提问来源于stack exchange,提问作者Nonu Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:22:47