xml序列化 - 动态更改元素名称 [英] xml serialization - dynamically change element name
本文介绍了xml序列化 - 动态更改元素名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用xmlserialization,创建了一些类,但对于一个节点我想要xml为
< AliasNames >
< AliasGivenName1 > Joe < / AliasGivenName1 >
< AliasMiddleName1 > < / AliasMiddleName1 >
< AliasFamilyName1 > Doe < / Alias FamilyName1 >
< AliasGivenName2 > Jerry < / AliasGivenName2 >
< AliasMiddleName2 > B < / AliasMiddleName2 >
< AliasFamilyName2 > Doe < / AliasFamilyName2 >
< AliasGivenName3 > Jim < / AliasGivenName3 >
< AliasMiddleName3 > C < / AliasMiddleName3 >
< AliasFamilyName3 > Doe < / AliasFamilyName3 >
< / AliasNames >
这包含添加到xml节点的索引。
如何实现这一目标,请帮忙。
提前致谢。
解决方案
您应该重新考虑序列化数据的方式,以获得更像xml的内容:
< aliasnames >
< aliasname >
< 给定 > Joe < / given >
< middle > < / middle >
< family > Doe < / family >
< / aliasname >
< aliasname >
< 给定 > Jerry < < span class =code-leadattribute> / given >
< middle > B < < span class =code-leadattribute> / middle >
< family > Doe < / family >
< / aliasname >
< aliasname >
< 给定 > Jim < span class =code-keyword>< / given >
< middle > C < span class =code-keyword>< / middle >
< 系列 > Doe < / family >
< / aliasname >
< / aliasnames < span class =code-keyword>>
这可以使用具有Given,Middle和Family属性的AliasName类数组来完成。 />
如果你不能改变xml格式,你应该自己使用XmlDocument:
XmlDocument xml = < span class =code-keyword> new XmlDocument();
XmlElement eltRoot = xml.CreateElement( AliasNames);
xml.AppendChild(eltRoot);
for ( int i = 1 ; i< = arrayOfNames.Length(); ++ i)
{
XmlElement elt = xml.CreateElement( AliasGivenName跨度> + I);
elt.InnertText = arrayOfNames [i] .GivenName;
eltRoot.AppendChild(elt);
elt = xml.CreateElement( AliasMiddleName + i);
elt.InnerText = arrayOfNames [i] .MiddleName;
eltRoot.AppendChild(elt);
elt = xml.CreateElement( AliasFamilyName + i);
elt.InnertText = arrayOfNames [i] .FamilyName;
eltRoot.AppendChild(elt);
}
xml.Save(filename);
不要这样做。请改为:
< aliasnames >
< aliasname >
< aliasgivenname > Joe < / aliasgivenname >
< aliasmiddlename > < / aliasmiddlename >
< aliasfamilyname > Doe < / aliasfamilyname >
< / aliasname >
< aliasname >
< aliasgivenname > Jerry < / aliasgivenname >
< aliasmiddlename > B < / aliasmiddlename >
< aliasfamilyname > Doe < / aliasfamilyname >
< / aliasname >
< aliasname >
< aliasgivenname > Jim < / aliasgivenname >
< aliasmiddlename > C < / aliasmiddlename >
< aliasfamilyname > Doe < / aliasfamilyname >
< / aliasname >
< / aliasnames < span class =code-keyword>>
感谢您的回复。我使用xml序列化程序将您提供的代码与我的代码集成在一起。
// 函数返回带有值的XmlDocument
public XmlDocument GetAliasNames()
{
XmlDocument xml = new XmlDocument();
XmlElement eltRoot = xml.CreateElement( AliasNames);
xml.AppendChild(eltRoot);
for ( int i = 1 ; i< = arrayOfNames.Length(); ++ i)
{
XmlElement elt = xml.CreateElement( AliasGivenName跨度> + I);
elt.InnertText = arrayOfNames [i] .GivenName;
eltRoot.AppendChild(elt);
elt = xml.CreateElement( AliasMiddleName + i);
elt.InnerText = arrayOfNames [i] .MiddleName;
eltRoot.AppendChild(elt);
elt = xml.CreateElement( AliasFamilyName + i);
elt.InnertText = arrayOfNames [i] .FamilyName;
eltRoot.AppendChild(elt);
}
return xml;
}
我上课了;
public class _PersonalData
{
public _PersonName PersonName = new _PersonName();
public _DemographicDetail DemographicDetail = new _DemographicDetail();
public XmlDocument AliasNames { get ; set ; }
}
我将值设置为;
PersonalData.AliasNames = GetAliasNames();
和my xml为;
< BackgroundSearchPackage >
< PersonalData >
< PersonName >
< GivenName > pritam < / GivenName >
< 中间名温泉n> > ravi < / MiddleName >
< FamilyName > Ajmire < / FamilyName >
< / PersonName >
< DemographicDetail >
< Ssn > 234523dsf < / Ssn >
< DateOfBirth > 14/23/1990 < ; / DateOfBirth >
< 种族 > dsf < ; / Race >
< GenderCode > M < ; / GenderCode >
< / DemographicDetail >
< AliasNames >
< AliasNames >
< AliasGivenName1 > GN1 < / AliasGivenName1 >
< AliasMiddleName1 > MN1 < / AliasMiddleName1 >
< AliasFamilyName1 > FN1 < / AliasFamilyName1 >
< / AliasNames >
< / AliasNames >
< / PersonalData >
< / BackgroundSearchPackage >
I am using xmlserialization, created some classes, but for one node I want xml as
<AliasNames>
<AliasGivenName1>Joe</AliasGivenName1>
<AliasMiddleName1>A</AliasMiddleName1>
<AliasFamilyName1>Doe</AliasFamilyName1>
<AliasGivenName2>Jerry</AliasGivenName2>
<AliasMiddleName2>B</AliasMiddleName2>
<AliasFamilyName2>Doe</AliasFamilyName2>
<AliasGivenName3>Jim</AliasGivenName3>
<AliasMiddleName3>C</AliasMiddleName3>
<AliasFamilyName3>Doe</AliasFamilyName3>
</AliasNames>
This contains index added to xml node.
how can I accomplish this, please help.
Thanks in advance.
解决方案
You should reconsider the way you are serialising your data to have something more "xml-like":
<aliasnames> <aliasname> <given>Joe</given> <middle>A</middle> <family>Doe</family> </aliasname> <aliasname> <given>Jerry</given> <middle>B</middle> <family>Doe</family> </aliasname> <aliasname> <given>Jim</given> <middle>C</middle> <family>Doe</family> </aliasname> </aliasnames>
This can be done using an array of AliasName class with Given, Middle and Family properties.
If you cannot change the xml format, you should use the XmlDocument by yourself:
XmlDocument xml = new XmlDocument(); XmlElement eltRoot = xml.CreateElement("AliasNames"); xml.AppendChild(eltRoot); for(int i=1; i<=arrayOfNames.Length(); ++i) { XmlElement elt = xml.CreateElement("AliasGivenName"+i); elt.InnertText = arrayOfNames[i].GivenName; eltRoot.AppendChild(elt); elt = xml.CreateElement("AliasMiddleName"+i); elt.InnerText = arrayOfNames[i].MiddleName; eltRoot.AppendChild(elt); elt = xml.CreateElement("AliasFamilyName"+i); elt.InnertText = arrayOfNames[i].FamilyName; eltRoot.AppendChild(elt); } xml.Save(filename);
Don't do it that way. Do this instead:
<aliasnames> <aliasname> <aliasgivenname>Joe</aliasgivenname> <aliasmiddlename>A</aliasmiddlename> <aliasfamilyname>Doe</aliasfamilyname> </aliasname> <aliasname> <aliasgivenname>Jerry</aliasgivenname> <aliasmiddlename>B</aliasmiddlename> <aliasfamilyname>Doe</aliasfamilyname> </aliasname> <aliasname> <aliasgivenname>Jim</aliasgivenname> <aliasmiddlename>C</aliasmiddlename> <aliasfamilyname>Doe</aliasfamilyname> </aliasname> </aliasnames>
Thanks for your response. I have integrated code supplied by you with my code using xml serializer.
// function returns XmlDocument with values public XmlDocument GetAliasNames() { XmlDocument xml = new XmlDocument(); XmlElement eltRoot = xml.CreateElement("AliasNames"); xml.AppendChild(eltRoot); for(int i=1; i<=arrayOfNames.Length(); ++i) { XmlElement elt = xml.CreateElement("AliasGivenName"+i); elt.InnertText = arrayOfNames[i].GivenName; eltRoot.AppendChild(elt); elt = xml.CreateElement("AliasMiddleName"+i); elt.InnerText = arrayOfNames[i].MiddleName; eltRoot.AppendChild(elt); elt = xml.CreateElement("AliasFamilyName"+i); elt.InnertText = arrayOfNames[i].FamilyName; eltRoot.AppendChild(elt); } return xml; }
I had a class as;
public class _PersonalData { public _PersonName PersonName = new _PersonName(); public _DemographicDetail DemographicDetail = new _DemographicDetail(); public XmlDocument AliasNames { get; set; } }
and I set values as;
PersonalData.AliasNames = GetAliasNames();
and my xml is as;
<BackgroundSearchPackage> <PersonalData> <PersonName> <GivenName>pritam</GivenName> <MiddleName>ravi</MiddleName> <FamilyName>Ajmire</FamilyName> </PersonName> <DemographicDetail> <Ssn>234523dsf</Ssn> <DateOfBirth>14/23/1990</DateOfBirth> <Race>dsf</Race> <GenderCode>M</GenderCode> </DemographicDetail> <AliasNames> <AliasNames> <AliasGivenName1>GN1</AliasGivenName1> <AliasMiddleName1>MN1</AliasMiddleName1> <AliasFamilyName1>FN1</AliasFamilyName1> </AliasNames> </AliasNames> </PersonalData> </BackgroundSearchPackage>
这篇关于xml序列化 - 动态更改元素名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文