2011-04-19 111 views
0

我有一个XML文件,我正在阅读代码隐藏的C#ASP.Net页面,其中列出了员工细节,并按照他们所属的团队进行组织。请看下图:为之前元素组添加不同值的XML元素

<user> 
<firstname>Tony</firstname> 
<surname>Smith</surname> 
<team>Board A</team> 
</user> 
<user> 
<firstname>Paula</firstname> 
<surname>Ram</surname> 
<team>Board A</team> 
</user> 
<user> 
<firstname>Linda</firstname> 
<surname>Smith</surname> 
<team>Board b</team> 
</user> 
<user> 
<firstname>Sam </firstname> 
<surname>Peak</surname> 
<team>Board b</team> 
</user> 

我想这样做的是以下几点:

<group>Board A</group> 
<user> 
<firstname>Tony</firstname> 
<surname>Smith</surname> 
<team>Board A</team> 
</user> 
<user> 
<firstname>Paula</firstname> 
<surname>Ram</surname> 
<team>Board A</team> 
</user> 
<user> 
<group>Board B</group> 
<firstname>Linda</firstname> 
<surname>Smith</surname> 
<team>Board b</team> 
</user> 
<user> 
<firstname>Sam </firstname> 
<surname>Peak</surname> 
<team>Board b</team> 
</user> 

所以基本上插入一个新元素与团队遵循它包含在球队元素的元素的名称?我不确定我是否有任何意义?

Ta。

莫莫

回答

0

使用XML那将是怎样的冗余使用你的第二个例子的结构,因为你已经可以组你的元素通过团队使用XPath(或LINQ)。在XPATH:

"/user[team='Board b']" 

,如果你有System.Xml.XmlNode

string currentGroup = "Board B"; //get this from some control 
XmlNodeList groups = xdoc.SelectNodes(String.Format("/user[team='{0}']",currentGroup)); 

,或者如果你有一个System.Xml.XPath.XPathNavigator类

string currentGroup = "Board B"; 
XPathNodeIterator groups = xNav.Select(String.Format("/user[team='{0}']",currentGroup)); 

或者你可以把你的“用户“:

<group name="Board A"> 
    <user> 
     <firstname>Tony</firstname> 
     <surname>Smith</surname> 
     <!-- <team>Board A</team> --> 
    </user> 
    <user> 
     <firstname>Paula</firstname> 
     <surname>Ram</surname> 
    </user> 
</group> 

然后以如何选择它们为例:

string currentGroup = "Board B"; 
XmlNodeList groups = xdoc.SelectNodes(String.Format("//user[parent::group/@name='{0}']",currentGroup));