我一直在做各種各樣的方法來比較XML文件的目錄,以便每個「實際構建」XML文件都有一個匹配的「模板構建」XML文件。這些模板將成爲未來構建的實際配置文件,因此我需要回到當前正在運行的配置文件並檢查數據的差異。這些差異將作爲未來版本的客戶端可更改配置。複雜的XML區別
我已經看過XML Diff和Patch(包括GUI和VisStu形式)並嘗試獲得差異,但它會返回異常左側和右側,並且永遠不會獲得創建的diffGram。看起來XD & P正在尋找不再存在或已經被破壞的庫元素。
現在,我是全新的XML和LINQ,但我知道這是我的答案所在。我一直在想創建路徑字符串的每一行,使得下面的XML文件:
<configuration>
<title>#ClientOfficialName# Interactive Map</title>
<subtitle>Powered By Yada</subtitle>
<logo>assets/images/mainpageglobe.png</logo>
<style alpha="0.9">
<colors>0xffffff,0x777777,0x555555,0x333333,0xffffff</colors>
<font name="Verdana"/>
<titlefont name="Verdana"/>
<subtitlefont name="Verdana"/>
</style>
會創建這樣的字符串:
configuration/title/"#ClientOfficialName# Interactive Map"
configuration/subtitle/"Powered By Yada"
configuration/logo/"assets/iamges/mainpageglobe.png"
configuration/style/alpha/"0.9"
configuration/style/colors/"0xffffff,0x777777,0x555555,0x333333,0xffffff"
等等這樣。
以這種方式,我可以從實際和模板文件中獲取每一行,並根據「如果它們具有相同的節點路徑,然後比較文本進行比較」。如果所有確切的兄弟文本不匹配,字符串放入differenceOutput.txt「。
到目前爲止,這是我提出的最好的概念。如果任何人都可以幫助我實現這個目標(通過這個或任何其他方法),我將不勝感激。
我現在有工作沒有問題的目錄系統,我只是不知道在哪裏從XML文件中的字符串容器的人口開始:
static void Main(string[] args)
{
//Set Up File Paths
var actualBuildPath = @"C:\actual";
var templateBuildPath = @"C:\template";
//Output File Setups
var missingFileList = new List<string>();
var differenceList = new List<string>();
//Iterate through Template Directory checking to see if the Current Build Directory
//has everything and finding differences if they exist
foreach (var filePath in Directory.GetFiles(templateBuildPath, "*.xml", SearchOption.AllDirectories))
{
//Announce Current File
Console.WriteLine("File: {0} ", filePath);
//Make Sure file Exists in current build
if (File.Exists(filePath.Replace(templateBuildPath, actualBuildPath)))
{
//Fill in String Containers as prep for comparison
var templateBuildFormattedXmlLines = PopulateStringContainerFromXML(filePath);
var actualBuildFormattedXmlLines = PopulateStringContainerFromXML(filePath.Replace(templateBuildPath, actualBuildPath));
//COMPARISON SECTION-------------------------------------------------------
xmlFileCompare(templateBuildFormattedXmlLines, actualBuildFormattedXmlLines);
}
//Put missing file into missing file output file
else
missingFileList.Add("Missing: " + filePath.Replace(templateBuildPath, actualBuildPath));
}
//Create Output Folder and Output Files
if (!Directory.Exists(actualBuildPath + @"\Outputs"))
Directory.CreateDirectory(actualBuildPath + @"\Outputs");
File.WriteAllLines(actualBuildPath + @"\Outputs\MissingFiles.txt", missingFileList);
File.WriteAllLines(actualBuildPath + @"\Outputs\differenceList.txt", differenceList);
//Wait to close console until user interacts
Console.ReadLine();
}
您可以使用DataSet方法ReadXML的()讀取XML,然後比較數據表。 Web上有很多示例用於比較兩個數據表。 – jdweng
謝謝jdweng!我現在就開始研究數據表。 –