6

希望你能帮助我一点。我正在尝试写入 XML 文件,但正在努力编写写入 XML 文件的方法。这是手动编写的 XML 文件(使用 Notepad++ 等):

<software>
    <software_entry
    name="Adobe Acrobat X Standard"
    path="Applications\Acrobat\Acrobat X Standard\AcroStan.msi" 
    type="msi"
    switches="/qn ALLUSERS=1"
    />

    <software_entry
    name="Adobe Acrobat X Professional"
    path="Applications\Acrobat\Acrobat X Pro\AcroPro.msi"
    type="msi"
    switches="/qn ALLUSERS=1"
    />
</software>

应用程序这一部分的目的是使用 GUI 编写它。

在应用程序中,用户选择 XML 文件的名称。然后将其保存在临时文件夹中,直到在该过程中进一步询问用户要将其保存在何处。输入所需的文件名称并单击“创建”后,运行名为“createAndLoadXML”的方法。顾名思义,它创建并加载一个 XML 文件(以在表单上填充列表视图控件)。代码可以在下面看到。

private void createAndLoadXML()
{
    // Method to create XML file based on name entered by user
    string tempPath = Path.GetTempPath();
    string configFileName = fileNameTextBox.Text;
    string configPath = tempPath + configFileName + ".xml";
    // Create XDocument
    XDocument document = new XDocument(
        new XDeclaration("1.0", "utf8", "yes"),
        new XComment("This XML file defines the software selections for use with the Software Installer"),
        new XComment("XML file generated by Software Installer"),
        new XElement("software",
            new XElement("software_entry",
                new XAttribute("name", ""),
                new XAttribute("path", ""),
                new XAttribute("type", ""),
                new XAttribute("switches", ""))
                )
        );
    document.Save(configPath);
    configCreateLabel.Visible = true;
    document = XDocument.Load(configPath);
}

现在,这个表单的下方是 4 个用于用户输入的文本框,每个文本框都与创建的属性(名称、路径、类型和开关)有关。想法是用户将在这些文本框中输入内容,单击“添加”按钮,然后程序会将这 4 个字段作为属性写入此 XML 文件。到目前为止,我有这段代码,它非常不完整,甚至没有使用 LINQ to XML。

private void writeToXML()
{
    // Method to write lines to XML file based on user input
    // Sets string variables
    string fileName = softwareNameTextBox.Text;
    string filePath = filePathTextBox.Text;
    string fileType = installerType.Text.ToString();
    string installSwitches = installSwitchesTextBox.Text;
    using (XmlWriter xw = XmlWriter.Load(configPath)) //This line is wrong, I know
    {
        xw.WriteStartElement("software");
        xw.WriteElementString("name", fileName);
        xw.WriteElementString("path", filePath);
        xw.WriteElementString("type", fileType);
        xw.WriteElementString("switches", installSwitches);
        xw.WriteEndElement();
    }
}

基本上,任何人都可以帮助我使用上述将用户输入文本框控件的数据写入 XML 的方法吗?我不确定如何加载先前创建的 XML 文档(通过我的 createAndLoadXML 方法),以及如何使用 LINQ to XML 在根元素(软件)中进行编写。

4

1 回答 1

8

试试这个。我认为这应该会得到你想要的,假设 XML 事先存在,因为你createAndLoadXML在这个方法之前调用。我是用 NotePad++ 写的,所以我可能有一两个错误。

private void writeToXML()
{
    // Method to write lines to XML file based on user input
    // Sets string variables
    string fileName = softwareNameTextBox.Text;
    string filePath = filePathTextBox.Text;
    string fileType = installerType.Text.ToString();
    string installSwitches = installSwitchesTextBox.Text;

    string FILE_PATH = "bla.xml";

    XDocument xDoc = XDocument.Load(FILE_PATH);

    xDoc.Root.Add(new XElement("software_entry",
                    new XAttribute("name", fileName),
                    new XAttribute("path", filePath),
                    new XAttribute("type", fileType),
                    new XAttribute("switches", installSwitches)
                ));
    xDoc.Save(FILE_PATH);
}
于 2013-02-19T00:51:04.410 回答