Что лучший способ состоит в том, чтобы сравнить XML-файлы для равенства?

Почему вы не используете типы?

Почему у вас есть [disabled]="irule.type[i], но тип это строка, и в вашей инициализации у вас есть пустое значение, поэтому следует вернуть OutOfRangeException в JavaScript

Почему вы не удалили ngModel из ngForm? например :

@ViewChild(NgForm) form : NgForm;
removeExample(index: number){
   let currentControlName: string = `iruleValue${i}`
   let control:NgModel = this.form.controls[currentControlName];
   control && this.form.removeControl(control)
   this.campaign.includeRules.splice(i, 1)
   this.changeDetectorRef.detectChanges()
}
12
задан Community 23 May 2017 в 11:54
поделиться

5 ответов

Это действительно зависит от того, что Вы хотите проверить как "различия".

Прямо сейчас мы используем Microsoft XmlDiff: http://msdn.microsoft.com/en-us/library/aa302294.aspx

11
ответ дан 2 December 2019 в 19:56
поделиться

Выполнение простой строки выдерживает сравнение на a xml строка не всегда работает. Почему?

например, оба:

<MyElement></MyElmennt> и <MyElment/> равны от xml точка зрения..

Существуют алгоритмы для преобразования создания xml всегда выглядите одинаково, их называют алгоритмами канонизации. .Net имеет поддержку канонизации.

1
ответ дан 2 December 2019 в 19:56
поделиться

Из-за содержания XML-файла другое форматирование может иметь и все еще считаться тем же (с точки зрения DOM) при тестировании равенства, необходимо ли определить, какова мера того равенства, например, форматирование проигнорировано? делает метаданные, проигнорированы, и т.д. располагает важный, много пограничных случаев.

Обычно Вы создавали бы класс, который определяет Ваши правила равенства, и используйте его для своих сравнений, и если Ваш класс сравнения реализует IEqualityComparer and/or IEqualityComparer<T> интерфейсы, затем Ваш класс может использоваться в наборе встроенных списков платформы как тестовая реализация равенства также. Плюс, конечно, у Вас может быть столько, сколько необходимо измерить равенство по-другому, поскольку требования требуют.

т.е.

IEnumerable<T>.Contains
IEnumerable<T>.Equals
The constructior of a Dictionary etc etc
0
ответ дан 2 December 2019 в 19:56
поделиться

Я закончил тем, что получил результат, который я хотел со следующим кодом:

private static void ValidateResult(string validationXml, XPathNodeIterator iterator, params string[] excludedElements)
    {
        while (iterator.MoveNext())
        {
            if (!((IList<string>)excludedElements).Contains(iterator.Current.Name))
            {
                Assert.IsTrue(validationXml.Contains(iterator.Current.Value), "{0} is not the right value for {1}.", iterator.Current.Value, iterator.Current.Name);
            }
        }
    }

Прежде, чем назвать метод, я создаю навигатора на экземпляре XmlDocument этот путь:

XPathNavigator nav = xdoc.CreateNavigator();

Затем, я создаю экземпляр XPathExpression, как так:

XPathExpression expression = XPathExpression.Compile("/blah/*");

Я называю метод после создания итератора с выражением:

XPathNodeIterator iterator = nav.Select(expression);

Я все еще выясняю, как оптимизировать его далее, но это добивается цели на данный момент.

0
ответ дан 2 December 2019 в 19:56
поделиться

Вы могли бы найти, что это менее хрупко, чтобы проанализировать XML в XmlDocument и основывать Ваш Утверждать запросы к Запросу XPath. Вот некоторые методы утверждения помощника, которые я часто использую. Каждый берет XPathNavigator, который можно получить путем называния CreateNavigator () на XmlDocument или на любом узле полученным из документа. Пример использования был бы:

     XmlDocument doc = new XmlDocument( "Testdoc.xml" );
     XPathNavigator nav = doc.CreateNavigator();
     AssertNodeValue( nav, "/root/foo", "foo_val" );
     AssertNodeCount( nav, "/root/bar", 6 )

    private static void AssertNodeValue(XPathNavigator nav,
                                         string xpath, string expected_val)
    {
        XPathNavigator node = nav.SelectSingleNode(xpath, nav);
        Assert.IsNotNull(node, "Node '{0}' not found", xpath);
        Assert.AreEqual( expected_val, node.Value );
    }

    private static void AssertNodeExists(XPathNavigator nav,
                                         string xpath)
    {
        XPathNavigator node = nav.SelectSingleNode(xpath, nav);
        Assert.IsNotNull(node, "Node '{0}' not found", xpath);
    }

    private static void AssertNodeDoesNotExist(XPathNavigator nav,
                                         string xpath)
    {
        XPathNavigator node = nav.SelectSingleNode(xpath, nav);
        Assert.IsNull(node, "Node '{0}' found when it should not exist", xpath);
    }

    private static void AssertNodeCount(XPathNavigator nav, string xpath, int count)
    {
        XPathNodeIterator nodes = nav.Select( xpath, nav );
        Assert.That( nodes.Count, Is.EqualTo( count ) );
    }
4
ответ дан 2 December 2019 в 19:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: