我想用C#更新一个xml文件。 文档具有相同的模式,但更新文档具有新的赔率,新事件新体育。我正在使用ID来比较这两个文件,但对于锦标赛我必须按名称进行比较。有时会有更新的赔率,我需要将文件替换为更新文件中的更新文件
这是更新文件
<Sports>
<Sport id="5" name="Tennis">
<Tournament id="3" name="ATP - Basel, Switzerland">
<Match id="8331220" name="Federer, Roger v Sock, Jack" startDate="2015-10-31T14:50:00">
<MatchOdds>
<Bet id="20">
<Outcome Special="" name="1" odds="1.1"/>
<Outcome Special="" name="2" odds="8.25"/>
</Bet>
<Bet id="231">
<Outcome Special="" name="1" odds="1.22"/>
<Outcome Special="" name="2" odds="4.5"/>
</Bet>
</MatchOdds>
</Match>
</Tournament>
</Sport>
</Sports>
这是示例更新文件
<Sports>
<Sport id="5" name="Tennis">
<Tournament id="3" name="ATP - Basel, Switzerland">
<Match id="8331220" name="Federer, Roger v Sock, Jack" startDate="2015-10-31T14:50:00">
<MatchOdds>
<Bet id="20">
<Outcome Special="" name="1" odds="34"/>
<Outcome Special="" name="2" odds="34"/>
</Bet>
<Bet id="231">
<Outcome Special="" name="1" odds="34"/>
<Outcome Special="" name="2" odds="3434"/>
</Bet>
<Bet id="233">
<Outcome Special="" name="2:0" odds="1.35"/>
<Outcome Special="" name="2:1" odds="3.8"/>
<Outcome Special="" name="0:2" odds="16.25"/>
<Outcome Special="" name="1:2" odds="12.75"/>
</Bet>
</MatchOdds>
</Match>
<Match id="8331268" name="Peya A / Soares B v Rojer J-J / Tecau H" startDate="2015-10-31T16:10:00">
<MatchOdds>
<Bet id="20">
<Outcome Special="" name="1" odds="2.15"/>
<Outcome Special="" name="2" odds="1.75"/>
</Bet>
</MatchOdds>
</Match>
<
<Sport id="23" name="Volleyball">
<Tournament id="195" name="Turkey - 1. Lig, Women">
<Match id="8155390" name="Idmanocagi v Halkbank Ankara" startDate="2015-10-31T14:00:00">
<MatchOdds>
<Bet id="226">
<Outcome Special="178.5" name="Over" odds="1.8"/>
<Outcome Special="178.5" name="Under" odds="1.95"/>
</Bet>
</MatchOdds>
</Match>
</Tournament>
</Sport>
</Sports>
结果xml文件必须与此类似:
<Sports>
<Sport id="5" name="Tennis">
<Tournament id="3" name="ATP - Basel, Switzerland">
<Match id="8331220" name="Federer, Roger v Sock, Jack" startDate="2015-10-31T14:50:00">
<MatchOdds>
<Bet id="20">
<Outcome Special="" name="1" odds="1.1"/>
<Outcome Special="" name="2" odds="8.25"/>
</Bet>
<Bet id="231">
<Outcome Special="" name="1" odds="34"/>
<Outcome Special="" name="2" odds="3434"/>
</Bet>
<Bet id="233">
<Outcome Special="" name="2:0" odds="1.35"/>
<Outcome Special="" name="2:1" odds="3.8"/>
<Outcome Special="" name="0:2" odds="16.25"/>
<Outcome Special="" name="1:2" odds="12.75"/>
</Bet>
</MatchOdds>
</Match>
<Match id="8331268" name="Peya A / Soares B v Rojer J-J / Tecau H" startDate="2015-10-31T16:10:00">
<MatchOdds>
<Bet id="20">
<Outcome Special="" name="1" odds="2.15"/>
<Outcome Special="" name="2" odds="1.75"/>
</Bet>
</MatchOdds>
</Match>
</Tournament>
</Sport>
<Sport id="23" name="Volleyball">
<Tournament id="195" name="Turkey - 1. Lig, Women">
<Match id="8155390" name="Idmanocagi v Halkbank Ankara" startDate="2015-10-31T14:00:00">
<MatchOdds>
<Bet id="226">
<Outcome Special="178.5" name="Over" odds="1.8"/>
<Outcome Special="178.5" name="Under" odds="1.95"/>
</Bet>
</MatchOdds>
</Match>
</Tournament>
</Sport>
</Sports>
我是C#的新手,我还在学习。所以我写这段代码: https://github.com/cologneto/123456/blob/master/LastTry/MerginXmls.cs
正如你所看到的,我无法使用LINQ,而且我使用XmlDocument和许多“for”循环来编写它。这使得我的代码不可读,有时候它的工作时间不行。这就是我放入try-catch条件的原因。 我确信它可以用更短更干净的方式制作。 有人可以帮我指导如何使用XDocument LINQ进行操作吗?
的Georgi
答案 0 :(得分:0)
就像建议你应该在C#中查看XML序列化和反序列化你应该尝试类似这样的更新xml文件。
从XML Schema(XSD)文档生成一个类开始,以便轻松访问xmlfiles中的节点和元素。
使用框架工具中的XML架构定义工具xsd.exe将架构转换为可序列化的类或数据集。
运行(在vs命令提示符下)
//Open the two xml files examples
FileStream file1 = new FileStream(@"c:\New_Result_Tournaments.xml", FileMode.Open);
FileStream file2 = new FileStream(@"c:\Sports_odds_databas.xml", FileMode.Open);
//
XmlSerializer ser = new XmlSerializer(typeof(yourNamespace.yourClass));
try
{
myNamespace.yourClass NewResult = ser.Deserialize(file1) as myNamespace.yourClass;
yourNamespace.yourClass SportOddsDatbas = ser.Deserialize(file2) as myNamespace.yourClass;
if( NewResult != null && SportOddsDatbas != null)
{
/* Here you should have access both xml files just
add information want update seconed file with from
the first.*/
// Save the updates made in c:\Sports_odds_databas.xml
serializer.Serialize(file2, SportOddsDatbas);
}
}
catch (Exception ex)
{
// Todo)
// Very good to use the exception to find fault mapping of XML can save lot of time.
}
file1.Close();
file2.Close();
添加类.cs文件创建了你的项目。在项目中添加此代码已经做了一些修改,例如文件名,类和命名空间
MPI_Gatherv