Сравнение Xml в C#

Мы заметили, что вы работаете с устаревшей версией API, поэтому, пожалуйста, обновите Aspose.PDF для .NET 19.2, которая является последней доступной версией API, поскольку она включает больше функций и исправлений ошибок. Вы можете использовать приведенный ниже фрагмент кода, чтобы добавить таблицу на страницу документа PDF, одновременно устанавливая границы для всех ячеек.

// Load source PDF document
Aspose.Pdf.Document document = new Aspose.Pdf.Document();
// Add a page to the document
Page page = document.Pages.Add();
// Initializes a new instance of the Table
Aspose.Pdf.Table table = new Aspose.Pdf.Table();
// Set the table border color as LightGray
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// Set the border for table cells
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// Create a loop to add 10 rows
for (int row_count = 1; row_count <= 10; row_count++)
{
    // Add row to table
    Aspose.Pdf.Row row = table.Rows.Add();
    // Add table cells
    row.Cells.Add("Column (" + row_count + ", 1)");
    row.Cells.Add("Column (" + row_count + ", 2)");
}
// Add table object to first page of input document
page.Paragraphs.Add(table);
// Save updated document containing table object
document.Save(dataDir + "Table_19.2.pdf");

Сгенерированный PDF документ был приложен для вашей ссылки Table19.2.pdf . Пожалуйста, не стесняйтесь сообщить нам, если вам нужна дополнительная помощь.

PS: Я работаю с Aspose в качестве разработчика Evangelist.

13
задан TStamper 27 April 2009 в 16:46
поделиться

5 ответов

Я получил ответ от Мартина Хоннена в формате XML и .NET Framework MSDN Forum. Короче говоря, он предлагает использовать функцию глубокого равенства XQuery 1.0 и предлагает несколько реализаций C #. Кажется, работает.

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

Я знаю, что вы сосредоточены не на модульных тестах, но XMLUnit может сравнивать два файла XML, и я думаю, что он способен решить ваш пример. Может быть, вы могли бы взглянуть на код и выяснить ваше решение.

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

Может быть, стоит загрузить экземпляры XmlDocument из каждого файла XML и сравнить вместо этого XML DOM? Обеспечение правильной проверки выполняется для каждого, что должно дать вам общую основу для сравнения и должно позволять стандартную отчетность о различиях. Возможно, даже возможность обновлять одно из другого с помощью дельты.

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

Эти документы не являются семантически эквивалентными. Элемент верхнего уровня первого находится в пространстве имен http: // myNS , а элемент второго уровня находится в пространстве имен по умолчанию.

Дочерний элемент Элементы двух документов эквивалентны. Но сами документы не являются.

Редактировать:

Существует большая разница между xmls: ns = 'http: // myNS' и xmlns = 'http: // myNS ', который я, кажется, упустил из виду. В любом случае, эти документы семантически эквивалентны, и я просто ошибаюсь.

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

Документы изоморфны, как показано в программе ниже. Я думаю, что если вы используете XmlDiffOptions.IgnoreNamespaces и XmlDiffOptions.IgnorePrefixes для настройки Microsoft.XmlDiffPatch.XmlDiff , вы получите желаемый результат.

using System.Linq;
using System.Xml.Linq;
namespace SO_794331
{
    class Program
    {
        static void Main(string[] args)
        {
            var docA = XDocument.Parse(
                @"<root xmlns:ns=""http://myNs""><ns:child>1</ns:child></root>");
            var docB = XDocument.Parse(
                @"<root><child xmlns=""http://myNs"">1</child></root>");

            var rootNameA = docA.Root.Name;
            var rootNameB = docB.Root.Name;
            var equalRootNames = rootNameB.Equals(rootNameA);

            var descendantsA = docA.Root.Descendants();
            var descendantsB = docB.Root.Descendants();
            for (int i = 0; i < descendantsA.Count(); i++)
            {
                var descendantA = descendantsA.ElementAt(i);
                var descendantB = descendantsB.ElementAt(i);
                var equalChildNames = descendantA.Name.Equals(descendantB.Name);

                var valueA = descendantA.Value;
                var valueB = descendantB.Value;
                var equalValues = valueA.Equals(valueB);
            }
        }
    }
}
10
ответ дан 2 December 2019 в 00:19
поделиться
Другие вопросы по тегам:

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