сравнить два XML-файла, используя xslt / c # - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть два xml.Нужно прочитать эти два и создать новый XML только с различными элементами

Здравствуйте, эксперты, я новичок в этом материале, я хотел знать, как сравнить два XML-файла с использованием C # / xmlunit2.0 и отобразить другой XML-файлтолько с отличиями в файле xml:

xml1:

  <ORDERS>
     <ORDER>
      <ORDERNUM>979793524</ORDERNUM>
      <TIES>
        <TIE>
          <TIENUMBER>1</TIENUMBER>
          <ITEMS>
             <ITEM>
              <ITEMNUMBER>KF3P2</ITEMNUMBER>
              <ITEMQTY>1</ITEMQTY>
            </ITEM>
            <ITEM>
              <ITEMNUMBER>60RD2</ITEMNUMBER>
              <ITEMQTY>1</ITEMQTY>
            </ITEM>
          </ITEMS>
        </TIE>
      </TIES>
    </ORDER>
  </ORDERS>

XML2:

   <ORDERS>
    <ORDER>
      <ORDERNUM>979793524</ORDERNUM>
      <TIES>
        <TIE>
          <TIENUMBER>1</TIENUMBER>
          <ITEMS>
            <ITEM>
              <ITEMNUMBER>60RD2</ITEMNUMBER>
              <ITEMQTY>1</ITEMQTY>
            </ITEM>
            <ITEM>
              <ITEMNUMBER>KF3P2</ITEMNUMBER>
              <ITEMQTY>25</ITEMQTY>
            </ITEM>
          </ITEMS>
        </TIE>
      </TIES>
    </ORDER>
  </ORDERS>

  Expected Output:

  <ORDERNUM>979793524</ORDERNUM>
   <ITEMNUMBER>KF3P2</ITEMNUMBER>
   <ITEMQTY>25</ITEMQTY>

1 Ответ

0 голосов
/ 22 сентября 2018

Это сложная задача, и нет общего (то есть независимого от слов) решения, отчасти потому, что только вы знаете, что важно в ваших данных, а что нет - например, в этом случае кажется, что порядок элементов ITEM не имеет значения (чтоне было бы случая, если бы вы сравнивали две статьи журнала).Предположительно, существуют некоторые причины, по которым нельзя рассматривать наличие TIEQTY в одном документе и его отсутствие в другом документе как существенную разницу, а также включение ORDERNUM, но не TIENUMBER в результат.

Один из подходов к этому:

(a) Свести данные до определенного уровня, скажем, ITEM, чтобы существенные свойства контейнера ITEM (например, ORDERNUM) стали свойствами ITEM.

(b) для каждого ITEM, вычислите aразличать подпись как строку, так что два элемента имеют разные подписи, если они разные.

(c) используйте группирование для группировки элементов по двум файлам по сигнатуре.

(d) output (некоторое представление) тех ЭЛЕМЕНТОВ, где размер группы равен 1.

Все это можно удобно сделать с помощью XSLT 2.0 или даже лучше, используя xsl:merge в XSLT 3.0.

...