Обновление / добавление к существующему XML - PullRequest
0 голосов
/ 03 апреля 2011

У меня проблема с обновлением существующего XML, но я не получаю никаких ошибок. Цель функции - проверить, существует ли файл, если он существует, тогда я хочу, чтобы новые значения были добавлены в конец существующего XML.

Функция проверяет существующие XML без каких-либо проблем, и если она не находит XML, который отлично работает, но когда файл существует, он не добавляет новую информацию в конец. Пожалуйста, кто-нибудь может мне помочь

Приведенный ниже код является частью функции, которая проверяет существующие файлы и пытается обновить файл.

void HashMe::SaveHashButton()
{
    try
    {
        array<String^>^ Available = gcnew array<String^>(100);
        Available = IO::Directory::GetFiles("E:\\XML Folder\\");
        String^ TextBoxText = textBox1->Text->ToString();

        for(int x = 0; x < Available->Length; x++)
        {
            String^ Current = Available[x];
            String^ NoExtension = IO::Path::GetFileNameWithoutExtension(Current);

            if(TextBoxText == NoExtension)
            {
                XmlDocument^ XmlDoc = gcnew XmlDocument();
                XmlDoc->Load(Current);

                XmlDoc->CreateElement("Project");
                XmlDoc->CreateAttribute("Name", textBox1->Text->ToString());

                XmlDoc->CreateElement("TestCycle");
                XmlDoc->CreateAttribute("Number", textBox2->Text->ToString());

                for (int x = 0; x < listBox2->Items->Count; ++x)
                {
                    String^ FileName = listBox2->Items[x]->ToString();
                    String^ Hash = listBox3->Items[x]->ToString();

                    XmlDoc->CreateElement("FileName");
                    XmlDoc->CreateAttribute("FileName", FileName);

                    XmlDoc->CreateElement("HashCode");
                    XmlDoc->CreateAttribute("HashCode", Hash);
                }
                XmlDoc->AppendChild(

                XmlDoc->Save(Current);
                return;
            }
        }

Результат создания нового XML выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<Project Name="d">
    <TestCycle Number="1">
        <FileName>E:\XML Folder\c.xml</FileName>
        <HashCode>FC-8B-4D-EF-F6-21-C8-7A-1B-8C-40-BE-AC-7E-1E-5B</HashCode>
    </TestCycle>
</Project>

Так что, если обновление прошло успешно, я бы хотел, чтобы обновленный XML выглядел, например, так:

<?xml version="1.0" encoding="utf-8"?>
<Project Name="d">
    <TestCycle Number="1">
        <FileName>E:\XML Folder\c.xml</FileName>
        <HashCode>FC-8B-4D-EF-F6-21-C8-7A-1B-8C-40-BE-AC-7E-1E-5B</HashCode>
    </TestCycle>
</Project>
<Project Name="This is the appended new information">
    <TestCycle Number="99">
        <FileName>E:\XML Folder\c.xml</FileName>
        <HashCode>FC-8B-4D-EF-F6-21-C8-7A-1B-8C-40-BE-AC-7E-1E-5B</HashCode>
        <FileName>E:\XML Folder\c.xml</FileName>
        <HashCode>FC-8B-4D-EF-F6-21-C8-7A-1B-8C-40-BE-AC-7E-1E-5B</HashCode>
        <FileName>E:\XML Folder\c.xml</FileName>
        <HashCode>FC-8B-4D-EF-F6-21-C8-7A-1B-8C-40-BE-AC-7E-1E-5B</HashCode>
        <FileName>E:\XML Folder\c.xml</FileName>
        <HashCode>FC-8B-4D-EF-F6-21-C8-7A-1B-8C-40-BE-AC-7E-1E-5B</HashCode>
    </TestCycle>
</Project>

Пожалуйста, кто-нибудь, помогите мне: (

1 Ответ

0 голосов
/ 03 апреля 2011

Следующий код работает для меня:

XmlDocument^ XmlDoc = gcnew XmlDocument();
XmlDoc->Load("projects.xml");

XmlElement^ NewProject = XmlDoc->CreateElement("Project");
NewProject->SetAttribute("Name", "This is the appended new information");
XmlDoc->DocumentElement->AppendChild(NewProject);

XmlElement^ NewTestCycle = XmlDoc->CreateElement("TestCycle");
NewProject->SetAttribute("Number", "99");
NewProject->AppendChild(NewTestCycle);

for (int x = 0; x < 4; ++x)
{
    String^ FileName = "E:\\XML Folder\\c.xml";
    String^ Hash = "FC-8B-4D-EF-F6-21-C8-7A-1B-8C-40-BE-AC-7E-1E-5B";

    XmlElement^ NewFileName = XmlDoc->CreateElement("FileName");
    NewFileName->SetAttribute("FileName", FileName);
    NewTestCycle->AppendChild(NewFileName);

    XmlElement^ NewHashCode = XmlDoc->CreateElement("HashCode");
    NewHashCode->SetAttribute("HashCode", Hash);
    NewTestCycle->AppendChild(NewHashCode);
}

XmlDoc->Save("new projects.xml");

Кроме того, если я правильно понимаю XML, лучшая структура будет выглядеть примерно так, поэтому очевидно, что <FileName> и <HashCode>принадлежат друг другу.

<File>
  <FileName>E:\XML Folder\c.xml</FileName>
  <HashCode>FC-8B-4D-EF-F6-21-C8-7A-1B-8C-40-BE-AC-7E-1E-5B</HashCode>
</File>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...