Beispiel #1
0
        // проверка атрибутов
        private void compareAttributes(XElement xESrc, XElement xEDst)
        {
            // - удаление
            List <string> delElements = xEDst.Attributes().Select(e => e.Name.LocalName).Except(xESrc.Attributes().Select(e => e.Name.LocalName)).ToList();

            foreach (string item in delElements)
            {
                XMLCompareChangeItem newItem = new XMLCompareChangeItem();
                newItem.SetNamesFromXElement(xEDst);
                newItem.AttrName = item;
                newItem.Result   = XMLCompareResultEnum.Remove;
                _changes.Add(newItem);
            }

            XAttribute curAtr;

            // - цикл по атрибутам в Source
            foreach (XAttribute xAttrSrc in xESrc.Attributes())
            {
                // есть атрибут
                if (xEDst.Attributes(xAttrSrc.Name).Count() > 0)
                {
                    curAtr = xEDst.Attribute(xAttrSrc.Name);
                    if (xAttrSrc.Value != curAtr.Value)
                    {
                        XMLCompareChangeItem newItem = new XMLCompareChangeItem();
                        newItem.SetNamesFromXElement(xESrc);
                        newItem.AttrName = curAtr.Name.LocalName;
                        newItem.Value    = xAttrSrc.Value;
                        newItem.Result   = XMLCompareResultEnum.ChangeValue;
                        _changes.Add(newItem);
                    }
                }
                // добавить атрибут
                else
                {
                    XMLCompareChangeItem newItem = new XMLCompareChangeItem();
                    newItem.SetNamesFromXElement(xESrc);
                    newItem.AttrName = xAttrSrc.Name.LocalName;
                    newItem.Result   = XMLCompareResultEnum.AddNew;
                    _changes.Add(newItem);
                }
            }
        }
Beispiel #2
0
        private void compareXElements(XElement xESrc, XElement xEDst)
        {
            // проверка атрибутов
            compareAttributes(xESrc, xEDst);

            // и вложенных элементов
            XElement curEl;
            // удаление элементов из Dest
            List <string> delElements = xEDst.Elements().Select(e => e.Name.LocalName).Except(xESrc.Elements().Select(e => e.Name.LocalName)).ToList();

            foreach (string item in delElements)
            {
                XMLCompareChangeItem newItem = new XMLCompareChangeItem();
                newItem.SetNamesFromXElement(xEDst.Element(item));
                newItem.Result = XMLCompareResultEnum.Remove;
                _changes.Add(newItem);
            }

            // цикл по элементам в Source
            // проверяются только уникальные элементы
            foreach (XElement xSrcElement in xESrc.Elements())
            {
                int cntEls = xEDst.Elements(xSrcElement.Name).Count();

                // добавить в Dest новый элемент
                if (cntEls == 0)
                {
                    XMLCompareChangeItem newItem = new XMLCompareChangeItem();
                    newItem.SetNamesFromXElement(xSrcElement);
                    newItem.Result = XMLCompareResultEnum.AddNew;
                    _changes.Add(newItem);
                }

                // проверяются только уникальные элементы
                else if (cntEls == 1)
                {
                    curEl = xEDst.Element(xSrcElement.Name);
                    compareXElements(xSrcElement, curEl);
                }
            }
        }