指示XmlWriterSettings使用自闭标签

Ist*_*tel 8 c# xml xmlwriter

我正在使用XmlWriterSettings将Xml写入文件.我的元素只有属性,没有孩子.我希望他们输出为:

<element a="1" /> 
Run Code Online (Sandbox Code Playgroud)

代替

<element a="1"></element>
Run Code Online (Sandbox Code Playgroud)

我可以使用XmlWriterSettings吗?

编辑:

代码如下:

private void Mission_Save(string fileName)
    {
        StreamWriter streamWriter = new StreamWriter(fileName, false);
        streamWriter.Write(Mission_ToXml());
        streamWriter.Close();
        streamWriter.Dispose();

        _MissionFilePath = fileName;
    }

private string Mission_ToXml()
    {
        XmlDocument xDoc;
        XmlElement root;
        XmlAttribute xAtt;

        xDoc = new XmlDocument();

        foreach (string item in _MissionCommentsBefore)
            xDoc.AppendChild(xDoc.CreateComment(item));

        root = xDoc.CreateElement("mission_data");
        xAtt = xDoc.CreateAttribute("version");
        xAtt.Value = "1.61";
        root.Attributes.Append(xAtt); 
        xDoc.AppendChild(root);

        //Out the xml's!
        foreach (TreeNode node in _FM_tve_Mission.Nodes)
            Mission_ToXml_private_RecursivelyOut(root, xDoc, node);

        foreach (string item in _MissionCommentsAfter)
            xDoc.AppendChild(xDoc.CreateComment(item));


        //Make this look good
        StringBuilder sb = new StringBuilder();
        XmlWriterSettings settings = new XmlWriterSettings();

        settings.Indent = true;
        settings.IndentChars = "  ";
        settings.NewLineChars = "\r\n";
        settings.NewLineHandling = NewLineHandling.Replace;
        settings.OmitXmlDeclaration = true;
        using (XmlWriter writer = XmlWriter.Create(sb, settings))
        {
            xDoc.Save(writer);
        }

        return sb.ToString();
    }

private void Mission_ToXml_private_RecursivelyOut(XmlNode root, XmlDocument xDoc, TreeNode tNode)
    {
        root.AppendChild(((MissionNode)tNode.Tag).ToXml(xDoc));
        foreach (TreeNode node in tNode.Nodes)
            Mission_ToXml_private_RecursivelyOut(root, xDoc, node);
    }
Run Code Online (Sandbox Code Playgroud)

这里_FM_tve_Mission是一个TreeView控件,它有节点,每个节点都有一个类MissionNode的标签,它有ToXml方法返回包含这个MissionNode转换为xml的XmlNode

jzw*_*man 8

你不需要任何特殊设置:

XmlWriter output = XmlWriter.Create(filepath);
 output.writeStartElement("element");
 output.writeAttributeString("a", "1");
 output.writeEndElement();
Run Code Online (Sandbox Code Playgroud)

这将给你一个输出<element a="1" />(刚刚在我正在编写xml的应用程序中测试它)

基本上如果你在编写结束元素之前没有添加任何数据,它将为你关闭它.

我也有以下XmlWriterSettings它可能是其中之一,如果它默认不工作:

XmlWriterSettings wSettings = new XmlWriterSettings();
wSettings.Indent = true;
wSettings.ConformanceLevel = ConformanceLevel.Fragment;
wSettings.OmitXmlDeclaration = true;
XmlWriter output = XmlWriter.Create(filePathXml, wSettings);
Run Code Online (Sandbox Code Playgroud)

  • 我发现了问题所在.我正在使用""分配XmlNode的InnerText.这个动作显然使它"扩展"成<> </>形式.没有分配它,它仍然保持相同""但它不会没有孩子扩展.问题解决了 (2认同)