Как я могу прочитать файл diffgram, сгенерированный XmlDiff.Compare()

Я сравниваю два XML-файла с помощью XMLDiff.compare(), который я использую впервые и не могу понять, что делать с файлом diffgram, сгенерированным для генерации HTML-кода для различия двух XML-файлов.

bool bIdentical = xmldiff.Compare(originalFile, newFile, false, diffgramWriter);

где оригинальный файл

<?xml version="1.0" encoding="utf-8"?>
<testsOutputData>
<TestName_AK1>
    <FeatureID ID="33B50792-207E514">
        <Intance_ID_1 >
            <CommandString>ABC </CommandString>
            <ProductID>100000</ProductID>
            <ProjectName>No Project</ProjectName>
            <TaskID>TESTSUITE</TaskID>
            <Type>Local</Type>
            <User></User>
        </Intance_ID_1>
        <Intance_ID_2>
            <CommandString>PQR </CommandString>
            <ProductID>1000</ProductID>
            <ProjectName>No Project</ProjectName>
            <TaskID>TESTSUITE</TaskID>
            <Type>Local</Type>
            <User></User>
        </Intance_ID_2>
        <Intance_ID_3>
            <CommandString>ABC </CommandString>
            <ProductID>1000</ProductID>
            <ProjectName>No Project</ProjectName>
            <TaskID>TESTSUITE</TaskID>
            <Type>Local</Type>
            <User></User>
        </Intance_ID_3>
    </FeatureID>
</TestName_AK1>

И новый файл

<?xml version="1.0" encoding="utf-8"?>
<testsOutputData>
<TestName_AK1>
    <FeatureID ID="33B50792-207E514">
        <Intance_ID_2>
            <CommandString>PQR </CommandString>
            <ProductID>1000</ProductID>
            <ProjectName>No Project</ProjectName>
            <TaskID>TESTSUITE</TaskID>
            <Type>Local</Type>
            <User></User>
        </Intance_ID_2>
        <Intance_ID_1 >
            <CommandString>ABC </CommandString>
            <ProductID>100000</ProductID>
            <ProjectName>No Project</ProjectName>
            <TaskID>TESTSUITE</TaskID>
            <Type>Local</Type>
            <User></User>
        </Intance_ID_1>
        <Intance_ID_3>
            <CommandString>ABC </CommandString>
            <ProductID>1000</ProductID>
            <ProjectName>No Project</ProjectName>
            <TaskID>TESTSUITE</TaskID>
            <Type>Local</Type>
            <User></User>
        </Intance_ID_3>
    </FeatureID>
</TestName_AK1>

сгенерированный diffgramwriter

<xd:xmldiff version="1.0" srcDocHash="11314582626391529293" options="None" fragments="no" xmlns:xd="http://schemas.microsoft.com/xmltools/2002/xmldiff">
<xd:node match="2">
<xd:node match="1">
  <xd:node match="1">
    <xd:add match="/2/1/1/2" opid="1" />
    <xd:remove match="2" opid="1" />
  </xd:node>
</xd:node>
</xd:node>
<xd:descriptor opid="1" type="move" />
</xd:xmldiff>

Теперь с помощью этого нужно сгенерировать HTML-файл.(Это более поздняя часть) Но я не могу правильно понять (прочитать) файл diffgram, не в состоянии понять смысл

<xd:add match="/2/1/1/2" opid="1" />
    <xd:remove match="2" opid="1" />

а также

<xd:descriptor opid="1" type="move" />

и их больше в этом типе узла в другой diffgram для других случаев. Как я могу понять этот файл diffgram таким образом, чтобы я мог генерировать HTML

1 ответ

Решение

Вы можете использовать свою diffgram в классе XmlDiffView. Но для меня это не работает идеально. Это подчеркивает разницу, но также показывает, что я удалил некоторые узлы и добавил новые.

XmlDiffView dv = new XmlDiffView();
//Load the original file again and the diff file.
XmlTextReader orig = new XmlTextReader("F:\\XML_1.xml");
        XmlTextReader diffGram = new XmlTextReader("F:\\diff.xml");
        dv.Load(orig,
            diffGram);

        //Wrap the HTML file with necessary html and 
        //body tags and prepare it before passing it to the GetHtml method.

        string tempFile =  "F:\\diff" +r.Next() + ".htm";
        StreamWriter sw1 = new StreamWriter(tempFile);
        sw1.Write("<html><body><table width='100%'>");
        //Write Legend.
        sw1.Write("<tr><td colspan='2' align='center'><b>Legend:</b> <font style='background-color: yellow'" +
            " color='black'>added</font>&nbsp;&nbsp;<font style='background-color: red'" +
            " color='black'>removed</font>&nbsp;&nbsp;<font style='background-color: " +
            "lightgreen' color='black'>changed</font>&nbsp;&nbsp;" +
            "<font style='background-color: red' color='blue'>moved from</font>" +
            "&nbsp;&nbsp;<font style='background-color: yellow' color='blue'>moved to" +
            "</font>&nbsp;&nbsp;<font style='background-color: white' color='#AAAAAA'>" +
            "ignored</font></td></tr>");

        dv.GetHtml(sw1);
        sw1.Write("</table></body></html>");
        sw1.Close();
        dv = null;
        orig.Close();
        diffGram.Close();

Я запустил это, используя ваши XML-файлы, и они равны. Когда я изменил значение CommandString с ABC на ABCD, я получил выделенное измененное значение.

Другие вопросы по тегам