如何读取 XmlDiff.Compare() 生成的 diffgram 文件
How can I read diffgram file generated by XmlDiff.Compare()
我正在使用 XMLDiff.compare() 比较两个 XML 文件,这是我第一次使用,无法弄清楚如何处理生成的 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 中它们更多是这种类型的节点。
我怎样才能以生成 HTML
的方式理解这个 diffgram 文件
您可以在 XmlDiffView class 中使用您的 diffgram。但对我来说,它并不完美。它突出了差异,但也表明我删除了一些节点并添加了新节点。
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> <font style='background-color: red'" +
" color='black'>removed</font> <font style='background-color: " +
"lightgreen' color='black'>changed</font> " +
"<font style='background-color: red' color='blue'>moved from</font>" +
" <font style='background-color: yellow' color='blue'>moved to" +
"</font> <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 时,我得到了高亮的更改值。
我正在使用 XMLDiff.compare() 比较两个 XML 文件,这是我第一次使用,无法弄清楚如何处理生成的 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 中它们更多是这种类型的节点。 我怎样才能以生成 HTML
的方式理解这个 diffgram 文件您可以在 XmlDiffView class 中使用您的 diffgram。但对我来说,它并不完美。它突出了差异,但也表明我删除了一些节点并添加了新节点。
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> <font style='background-color: red'" +
" color='black'>removed</font> <font style='background-color: " +
"lightgreen' color='black'>changed</font> " +
"<font style='background-color: red' color='blue'>moved from</font>" +
" <font style='background-color: yellow' color='blue'>moved to" +
"</font> <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 时,我得到了高亮的更改值。