У меня есть проект, который считывает XML-файл ожидаемых результатов сборки для каждой области сборки и сравнивает ее с журналами сборки, чтобы определить, прошла ли сборка. XML-файл, похоже, читается неправильно. Кто-нибудь знает, что не так с linq, из-за которого XML-файл извлекается некорректно?
Я рассматривал эти примеры:
linq
linqОднако, когда я распечатываю его, чтобы проверить его перед использованием, он получает неверные значения cName и cValue. Кроме того, он всегда выдает filename1.cs:
неправильно:
19:00
build_machine='mach31', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\R\filename1.cs', field='Status', comparison='equal', value='Success'
build_machine='mach31', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\R\filename1.cs', field='Status', comparison='equal', value='Success'
build_machine='mach31', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\R\filename1.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename4.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename4.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename4.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename4.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename4.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename4.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename4.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename4.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename4.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinISProjectVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename4.cs', field='Status', comparison='equal', value='Success'
должно быть:
19:00
build_machine='mach31', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\R\filename1.cs', field='Status', comparison='equal', value='Success'
build_machine='mach31', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\R\filename2.cs', field='Status', comparison='equal', value='Success'
build_machine='mach31', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\R\filename3.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename4.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename5.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename6.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\D\filename7.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\K\filename8.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\K\filename9.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\K\filename11.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename22.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinFileVersionStats', condition name='VersionFile', condition value = '\\view\Build_NightlyDeveloper\K\filename33.cs', field='Status', comparison='equal', value='Success'
build_machine='mach46', process_name='SpinISProjectVersionStats', condition name='ProductName', condition value = 'P1', field='Status', comparison='equal', value='Success'
...
Пока у меня есть этот код:
void ReadXml()
{
XmlDocument xml = new XmlDocument();
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string newPath = Path.GetFullPath(Path.Combine(path, @"..\.."));
string finalPathXml = Path.GetFullPath(Path.Combine(newPath, @"BuildVerificationBuildAttributes.xml"));
//linq
XDocument xmlDoc1 = XDocument.Load(finalPathXml);
XElement buildVerificationElement = xmlDoc1.Element("BuildVerification");
IEnumerable buildElements = buildVerificationElement.Elements("build");
IEnumerable buildMachines = buildElements.Elements("BuildMachine");
//get just the times from the xml
var codeFreezeTime = xmlDoc1.Descendants("codeFreezeTime").First()?.Value;
Console.WriteLine(codeFreezeTime);
IEnumerable processes = buildMachines.Elements("Process");
IEnumerable processNames = processes.Elements("ProcessName");
IEnumerable conditions = processNames.Elements("Conditions");
var found = xmlDoc1.XPathEvaluate("/BuildVerification/build/BuildMachine/Process/ProcessName/Conditions") as IEnumerable;
var results =
xmlDoc1.Descendants("build")
.SelectMany(x => x.Descendants("Process")
.SelectMany(y => y.Descendants("SuccessCriteria")
.Select(z => new
{
buildMach = (string)x.Element("BuildMachine"),
p1 = (string)y.Element("ProcessName"),
cName = (string)x.Descendants("Condition").FirstOrDefault().Attribute("name"),
cValue = (string)x.Descendants("Condition").FirstOrDefault().Attribute("value"),
f1 = (string)z.Element("field"),
c1 = (string)z.Element("comparison"),
v1 = (string)z.Element("value")
}))).ToList();
foreach (var cur in results)
{
Console.WriteLine("build_machine='{0}', process_name='{1}', condition name='{2}', condition value = '{3}', field='{4}', comparison='{5}', value='{6}'",
cur.buildMach, cur.p1, cur.cName, cur.cValue, cur.f1, cur.c1, cur.v1);
//get log data out to compare
if((cur.buildMach == "mach46") && (cur.p1 == "SpinISProjectVersionStats"))
{
Console.WriteLine("here"); //*at this point I see cur.cName=VersionFile which is wrong
}
//ParseLogFile(codeFreezeTime/*, versionChangeTime*/, cur.buildMach, cur.p1, cur.cName, cur.cValue, cur.f1, cur.c1, cur.v1);
}
}
Вот как выглядит мой XML:
19:00
mach31
SpinFileVersionStats
Status
equal
Success
SpinFileVersionStats
Status
equal
Success
SpinFileVersionStats
Status
equal
Success
mach46
SpinFileVersionStats
Status
equal
Success
SpinFileVersionStats
Status
equal
Success
SpinFileVersionStats
Status
equal
Success
SpinFileVersionStats
Status
equal
Success
SpinFileVersionStats
Status
equal
Success
SpinFileVersionStats
Status
equal
Success
SpinFileVersionStats
Status
equal & l t ; ! - - c a n ' t u s e & g t ; = h e r e - - & g t ; < b r / > & l t ; v a l u e & g t ; S u c c e s s & l t ; / v a l u e & g t ; < b r / > & l t ; / S u c c e s s C r i t e r i a & g t ; < b r / > & l t ; / C o n d i t i o n & g t ; < b r / > & l t ; / C o n d i t i o n s & g t ; < b r / > & l t ; / P r o c e s s & g t ; < b r / > & l t ; P r o c e s s & g t ; < b r / > & l t ; P r o c e s s N a m e & g t ; S p i n F i l e V e r s i o n S t a t s & l t ; / P r o c e s s N a m e & g t ; < b r / > & l t ; C o n d i t i o n s & g t ; < b r / > & l t ; C o n d i t i o n < b r / > n a m e = ' V e r s i o n F i l e ' v a l u e = & q u o t ; \ \ v i e w \ B u i l d _ N i g h t l y D e v e l o p e r \ K \ f i l e n a m e 2 2 . c s & q u o t ; & g t ; < b r / > < b r / > & l t ; S u c c e s s C r i t e r i a & g t ; < b r / > Status
equal
Success
SpinFileVersionStats
Status
equal
Success
SpinISProjectVersionStats
Status
equal
Success
SpinISProjectVersionStats
Status
equal
Success
SpinISProjectVersionStats
Status
equal
Success
GetSWStats
UpdateRequired
equal
YES
Status
equal
Successful
ParseISLogStats
Projects
equal
33
Projects
equal
8
Status
equal
Success
UpdateBuildArea-Stats
Dir
equal
Retail
eSecs
greaterThan
0
Подробнее здесь: https://stackoverflow.com/questions/783 ... using-linq
Получение неправильного имени файла, cName, cValue из xml, извлеченного с помощью linq ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение