将linq中的元素名称返回到xml结果

时间:2015-06-12 22:16:56

标签: xml vb.net linq

我需要在检索元素的属性值和元素值的同时检索元素名称。我设法检索了元素的属性值和元素的值,但无法检索元素的名称。

这是xml:

<appearance>
     <line-width type="stem">0.7487</line-width>
     <line-width type="beam">5</line-width>
     <line-width type="staff">0.7487</line-width>
     <line-width type="light barline">0.7487</line-width>
     <line-width type="heavy barline">5</line-width>
     <line-width type="leger">0.7487</line-width>
     <line-width type="ending">0.7487</line-width>
     <line-width type="wedge">0.7487</line-width>
     <line-width type="enclosure">0.7487</line-width>
     <line-width type="tuplet bracket">0.7487</line-width>
     <note-size type="grace">60</note-size>
     <note-size type="cue">60</note-size>
     <distance type="hyphen">120</distance>
     <distance type="beam">8</distance>
 </appearance>

这是我的linq查询

  Dim categories = From category In ScoreXml.Descendants("appearance") _
    let El = category.Elements _
    from Att in El _
    let myAtt = att.attribute("type").value _
    let myEl = el.value _
    Select myAtt, myEl

我将结果集添加到列表中,并且需要元素的名称来区分相同的属性值。即,beam是元素行宽和距离的属性值。我需要一个像&#34; line-width&#34; - &#34; beam&#34; - &#34; 5&#34;和&#34;距离&#34; - &#34; beam&#34; - &#34; 8&#34;。

我尝试了很多东西,甚至不记得我现在所做的事情。我开始绕圈子走了。我知道我已经在子查询中接近访问属性的父级然后访问元素名称,但我只是试图复制我为一个例子做的事情,但不记得我是怎么做的。无论如何,用子查询做这件事给我留下了笛卡尔积的结果,这显然是没用的。

我希望我的问题和需要一样清楚。如何访问/返回每个元素的名称?

1 个答案:

答案 0 :(得分:2)

您只需使用XElement.NameXElement.Name.LocalName来获取元素名称,例如:

Dim categories = From category In ScoreXml.Descendants("appearance") _
    let El = category.Elements _
    from Att in El _
    let myAtt = att.attribute("type").value _
    let myEl = el.value _
    Select myAtt, myEl, Att.Name.LocalName