在 C# 中创建或替换没有根的 XML 中的节点

2024-03-20

我有一个像这样的 XML 文件:

<Something>....</Something>
<Another>....</Another>
<Other>...</Other>

该 XML 文件没有根元素(我知道这是错误的 XML 格式)。

我需要创建或替换(如果已经存在)此 XML 中的节点,但我无法使用XDocument or XmlDocument因为它们需要根元素才能工作,而我无法将根元素添加到此 XML,因为我无法更改应用程序(Windows 窗体应用程序)中的更多代码。

我有什么选择来执行此操作?

编辑1: 使用 @chridam 的示例,我有这个方法,但它替换了整个 XML。我需要改变什么?

public void ReEscribirNodoXML(string pathXml, string nodoName, string nodeContent)
{
    if (File.Exists(pathXml))
    {
        XmlValidatingReader vr = new XmlValidatingReader(pathXml, XmlNodeType.Element, null);
        while (vr.Read())
        {
            Debug.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name);
        }

        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        settings.OmitXmlDeclaration = true;
        settings.NewLineOnAttributes = true;

        var writer = XmlWriter.Create(pathXml, settings);
        writer.WriteStartElement(nodoName);
        writer.WriteRaw(nodeContent);
        writer.WriteEndElement();

        writer.Flush();
    }
    else
    {
        throw new Exception("I#Error");
    }
}

只需提供一个可使用的框架即可使用 Xdocument,然后完成后丢弃该框架.

这是进入的片段、所做的更改、添加的新节点以及退出的片段:

var fragment = @"<Something>abc</Something>
<Another>def</Another>
<Other>ghi</Other>";

var xDoc = XDocument.Parse("<TempRoot>" + fragment + "</TempRoot>");

xDoc.Descendants("Another").First().Value = "Jabberwocky";
xDoc.Root.Add(new XElement("Omega", "Man"));

var fragOut = 
   string.Join(Environment.NewLine, xDoc.Root
                                        .Elements()
                                        .Select (ele => ele.ToString()));

Console.WriteLine (fragOut);
/* Prints out
<Something>abc</Something>
<Another>Jabberwocky</Another>
<Other>ghi</Other>
<Omega>Man</Omega>
*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中创建或替换没有根的 XML 中的节点 的相关文章

随机推荐