编辑并保存XML,添加额外的[]个字符

时间:2019-01-31 12:58:48

标签: c# xml

我需要编辑和保存-用自变量的值精确地替换xml(在c#项目中)中的文本,并保存在临时位置。该值被替换并保存在位置中,但是它添加了一些字符-[],因此当我在另一个应用程序中使用xml作为输入时,它显示为错误的xml!即使当我删除多余的字符并保存并重新运行时,它也会显示相同的错误。但是,当我删除多余的字符并将整个xml粘贴到一个新文件中时,它工作正常!我不明白是什么问题。在下面粘贴了我的代码:

{
parameterFileName = "test";

tempPath = Path.GetTempPath() + parameterFileName + DateTime.Now.ToString("dd-MM-yyyy_hh-mm-ss") + ".xml";

XmlDocument xdoc = GetParameterXML(parameterFileName);
            XmlNode root = xdoc.DocumentElement;

            XmlNode node = xdoc.DocumentElement.SelectSingleNode(@"/root/inputParameters");
            XmlNode childNode = node.ChildNodes[0];
            if (childNode is XmlCDataSection)
            {
                XmlCDataSection cdataSection = childNode as XmlCDataSection;

                if (cdataSection.Value.Contains("ID_VALUE"))
                {
                    cdataSection.Value = cdataSection.Value.Replace("ID_VALUE", id);
                }
            }


 xdoc.Save(tempPath);
}



public static XmlDocument GetParameterXML(string parameterFileName)
    {
        var sDllPath = AppDomain.CurrentDomain.BaseDirectory;
        XmlDocument xDoc = new XmlDocument();
        xDoc.Load(sDllPath + "\\Templates\\" + parameterFileName + ".xml");
        return xDoc;
    }

1 个答案:

答案 0 :(得分:0)

当您将XmlDocument与DTD一起使用来解析Xml文档时,内部子集为空表示自动插入方括号[]。

public static XmlDocument GetParameterXML(string parameterFileName)
{
    var sDllPath = AppDomain.CurrentDomain.BaseDirectory;
    XmlDocument xDoc = new XmlDocument();
    xDoc.Load(sDllPath + "\\Templates\\" + parameterFileName + ".xml");

    if (xDoc.DocumentType != null)
    {
        var name = xDoc.DocumentType.Name;
        var publicId = xDoc.DocumentType.PublicId;
        var systemId = xDoc.DocumentType.SystemId;
        var parent = xDoc.DocumentType.ParentNode;
        var documentTypeWithNullInternalSubset = xDoc.CreateDocumentType(name, publicId, systemId, null);
        parent.ReplaceChild(documentTypeWithNullInternalSubset, xDoc.DocumentType);
    }

    return xDoc;
}

有关系吗?

没有关系。但如果您的XML不包含任何内部子集,则格式良好的XML表示为空白方括号[]。这意味着您的xml不包含任何内部子集。

使用不带内部子集的XDocument解析xml时,XDocument会附加空白方括号[],而不是在DOCTYPE中不显示任何内容。

一个空的内部子集做什么?

内部实体的基本目的是避免一次又一次键入相同的内容(如组织的名称)。相反,我们可以定义一个内部实体来包含文本,然后只需要在要插入文本的位置使用该实体。由于该实体是由解析器扩展的,因此可以确保在每个位置都会得到相同的文本。如果您拼错实体名称,解析器也会捕获。

您可以了解有关内部子集here

的更多信息