terR0Q
20:59 21-09-2006 из жизни на диване
в течение 10 минут непринужденно набивалась схема кода и сам код (уж коли изучение идет параллельно с применением). затем последовала минута молчания и был добавлен намеренно незакрытый камент. называется, вспомнил

public static String AddOpenedArticle( String sectionName, Int32 articlesNumber )
{

* FUCK IT!!!!!!!!! IDIOT!!!!! YOU CAN MANAGE ALL THIS SHIT JUST BY A DYNAMIC
* XPATH!!!!!!!!

/*
* 1. Загружаем файл
* 2. Находим блок нужного раздела
* 3. В нем выбираем раздел общего числа статей
* и отдельно раздел числа открытых статей
* 4. Обновляем значения в узлах с учетом присланного числа статей
* 5. Сохраняем изменения.
* 6. Используя функции IncreaseArticlesTotalNumber и IncreaseArticlesTotalNumberSpecificType
* обновляем общую статистику
*/

String errorString = "";

// 1.
XmlDocument infoFile = new XmlDocument();
infoFile.Load( systemInfoFilePath );

//2.
XmlNodeList xmlElementsList = infoFile.GetElementsByTagName( xmlPathSectionNode );
/*
* данный прием неверен в случае использования такого узла,
* но подобная возможность пресекается далее проверкой был ли получен
* правильный узел.
* при этом не возникает ошибки использования неициализированной
* переменной типа XmlNode, которой не присвоено значение, в пункте 3.
*/
XmlNode xmlSectionNode = xmlElementsList.Item( 0 );

// используется для проверки был ли найден необходимый узел
bool isNodePresent = false;

foreach ( XmlNode xmlNode in xmlElementsList )
{
String attributeString = xmlNode.Attributes[ xmlAttributeSectionName ].Value;
// для тестирования
errorString += attributeString + "<br />";
if ( attributeString.Equals( sectionName ) )
{
xmlSectionNode = xmlNode;
isNodePresent = true;
break;
}
}

// проверка был ли получен узел
if ( !isNodePresent )
{
errorString += "Could not get section node in SystemInfo.xml";
return errorString;
}

// 3.
XmlNode totalArticlesCountNode = xmlSectionNode.SelectSingleNode( xmlSectionsTotalArticlesXPath );
XmlNode openArticlesCountNode = xmlSectionNode.SelectSingleNode( xmlSectionsOpenArticlesXPath );

// 4.
Int32 oldSectionTotalArticlesCount = Convert.ToInt32( totalArticlesCountNode.Value );
Int32 oldSectionOpenedArticlesCount = Convert.ToInt32( openArticlesCountNode.Value );

Int32 newSectionTotalArticlesCount = oldSectionTotalArticlesCount + articlesNumber;
Int32 newSectionOpenedArticlesCount = oldSectionOpenedArticlesCount + articlesNumber;

totalArticlesCountNode.Value = newSectionTotalArticlesCount.ToString();
openArticlesCountNode.Value = newSectionOpenedArticlesCount.ToString();

// 5.
infoFile.Save( systemInfoFilePath );

// 6.
IncreaseArticlesTotalNumber( articlesNumber );
IncreaseArticlesTotalNumberSpecificType( articlesNumber, ArticleAccessType.open );

return errorString;
}//AddOpenedArticle

(к сожалению у жру особенность весь текст выравнивать, ну да хрен с ними, с табами)
Комментарии:
Ниноко
23:07 21-09-2006
Мням, Террок, чо б я понимала, увы. Но в любом случае, такие вот озарения - это клево. Даже когда они собственной недогадливостью определяются :)
DSpirit
12:10 22-09-2006
%D
terR0Q
16:23 22-09-2006
Ashley Steel
а кроме как экспрессию и суть появления понимать тут и не надо =)