Linq to XML,合并具有相同属性但名称空间不同的元素

时间:2011-01-27 14:15:42

标签: c# xml linq

我想知道是否可以将这些元素与不同的名称空间合并;

     <imsss:objectives>
        <imsss:primaryObjective objectiveID="ettiquette_completed"/>
          <imsss:objective objectiveID="previous_sco_completed">
              <imsss:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.forcedsequential.playing_completed" readNormalizedMeasure="true" readSatisfiedStatus="true" />
          </imsss:objective>
      </imsss:objectives>
      <adlseq:objectives>
        <adlseq:objective objectiveID="ettiquette_completed">
          <adlseq:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.forcedsequential.ettiquette_completed" readCompletionStatus="true" writeCompletionStatus="true"/>
        </adlseq:objective>
        <adlseq:objective objectiveID="previous_sco_completed">
          <adlseq:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.forcedsequential.playing_completed"  readCompletionStatus="true" writeCompletionStatus="false"/>
        </adlseq:objective>
      </adlseq:objectives>

所以基本上我想结束

<imsss:objectives>
        <imsss:primaryObjective objectiveID="ettiquette_completed">
          <imsss:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.forcedsequential.ettiquette_completed" readCompletionStatus="true" writeCompletionStatus="true"/>
        </imsss:primaryObjective>
          <imsss:objective objectiveID="previous_sco_completed">
              <imsss:mapInfo targetObjectiveID="com.scorm.golfsamples.sequencing.forcedsequential.playing_completed" readNormalizedMeasure="true" readSatisfiedStatus="true" readCompletionStatus="true" writeCompletionStatus="false/>
          </imsss:objective>
      </imsss:objectives>

目前我有一个linq查询,它将所有元素与相同的objectiveid属性放在一起;

                XElement seqColl = getSequencingCollection(identifier);
                var ImssObj = seqColl.Element(imsss + "objectives").Elements();
                var AdlObj = seqColl.Element(adlSeq + "objectives").Elements();
                var newEl = from o in ImssObj 
                            join a in AdlObj on o.Attribute("objectiveID").Value equals a.Attribute("objectiveID").Value
                            select new XElement(o.Name, new XAttribute(o.Attribute("objectiveID")), o.Elements(), a.Elements());

(getSequencingCollection方法正常工作以从xml获取所有测序信息,因为它需要进行本地测序和共享测序)

谢谢大家。

1 个答案:

答案 0 :(得分:0)

我已经为此做了一个非常具体的解决方案,如果有人想看到它然后让我知道。我想不出它会帮助任何人。但如果你知道一种不同的方式,而不是我用过的长c#功能,请随时告诉我。感谢