2011-04-15 42 views
0

对不起,以下是很长的XML示例。它有两个记录,每个记录有三个相似的节点(<datafield tag="500">)。我想完成的是获得第二个节点<datafield tag = “5000”>的价值。下面的代码我得到了所有三个节点的值,但我想要的东西像get elementat(1)。感谢你的帮助。 我试过这个,但它没有奏效。从某个元素的Linq到xml输出可能性

MsgBox(xEle.Elements.ElementAt(1).Value) 
Dim xd As XDocument = XDocument.Load("C:\Users\stopete\Desktop\Marc_conv ertxml.xml") 
If xd IsNot Nothing Then 
Dim datafields = From datafield In xd.Descendants("datafield") 
Where (datafield.Attribute("tag").Value = "500") 
Select datafield 

For Each xEle In datafields 

MsgBox(xEle) 

Next 

End If 

XML:

<?xml version="1.0"?> 
<collection> 
<record> 
<leader>03799cam 2200493Ia 4500</leader> 
<controlfield tag="001">648168072 
<subfield code="a">Battle, Stephen L.</subfield> 
</controlfield> 
<controlfield tag="003">SIRSI</controlfield> 
<controlfield tag="005">20110207150903.0</controlfield> 
<controlfield tag="008">100716s2010 caub bm f000 0 eng d</controlfield> 
<controlfield tag="007">cr b|||||a||||</controlfield> 
<datafield tag="035" ind1=" " ind2=" "> 
<subfield code="a">AD#</subfield> 
<subfield code="c">AD#</subfield> 
<subfield code="d">AD#</subfield> 
</datafield> 
<datafield tag="037" ind1=" " ind2=" "> 
<subfield code="a">hey</subfield> 
</datafield> 
<datafield tag="040" ind1=" " ind2=" "> 
<subfield code="a">ADA524509</subfield> 
<subfield code="b">DTI</subfield> 
</datafield> 
<datafield tag="043" ind1=" " ind2=" "> 
<subfield code="a">n-us---</subfield> 
</datafield> 
<datafield tag="049" ind1=" " ind2=" "> 
<subfield code="a">AD#A</subfield> 
</datafield> 
<datafield tag="100" ind1="1" ind2=" "> 
<subfield code="a">Battle, Stephen L.</subfield> 
</datafield> 
<datafield tag="245" ind1="1" ind2="0"> 
<subfield code="a">Lessons in legitimacy</subfield> 
<subfield code="h">[electronic resource] :</subfield> 
<subfield code="b">the LTTE end-game of 2007--2009 /</subfield> 
<subfield code="c">Stephen L. Battle.</subfield> 
</datafield> 
<datafield tag="260" ind1=" " ind2=" "> 
<subfield code="a">Monterey, California :</subfield> 
<subfield code="b">Naval Postgraduate School,</subfield> 
<subfield code="c">2010.</subfield> 
</datafield> 
<datafield tag="300" ind1=" " ind2=" "> 
<subfield code="a">xiv, 57 p. :</subfield> 
<subfield code="b">ill. (1 col map) ;</subfield> 
<subfield code="c">28 cm.</subfield> 
</datafield> 
<datafield tag="500"> 
<subfield code="a">Thesis Advisor(s): Borer, Douglas A. ; Second Reader: Chatterjee, Anshu.</subfield> 
</datafield> 
<datafield tag="500"> 
<subfield code="a">"June 2010."</subfield> 
</datafield> 
<datafield tag="500"> 
<subfield code="a">Author(s) subject terms: LTTE, Counter Insurgency, COIN, Sri Lanka, Tamil Eelam, Eelam War IV, SLAF, South Asia.</subfield> 
</datafield> 
</record> 
<record> 
<leader>02919cam 2200493Ia 4500</leader> 
<controlfield tag="001">648167554</controlfield> 
<controlfield tag="003">SIRSI</controlfield> 
<controlfield tag="005">20110207150310.0</controlfield> 
<controlfield tag="008">100716s2010 caua bm f000 0 eng d</controlfield> 
<controlfield tag="007">cr b|||||a||||</controlfield> 
<datafield tag="035" ind1=" " ind2=" "> 
<subfield code="a">AD#</subfield> 
<subfield code="c">AD#</subfield> 
<subfield code="d">AD#</subfield> 
</datafield> 
<datafield tag="037" ind1=" " ind2=" "> 
<subfield code="a">hey</subfield> 
</datafield> 
<datafield tag="040" ind1=" " ind2=" "> 
<subfield code="a">ADA524541</subfield> 
<subfield code="b">DTI</subfield> 
</datafield> 
<datafield tag="043" ind1=" " ind2=" "> 
<subfield code="a">n-us---</subfield> 
</datafield> 
<datafield tag="049" ind1=" " ind2=" "> 
<subfield code="a">AD#A</subfield> 
</datafield> 
<datafield tag="100" ind1="1" ind2=" "> 
<subfield code="a">Battaglia, Neal F.</subfield> 
</datafield> 
<datafield tag="245" ind1="1" ind2="0"> 
<subfield code="a">Utility of satellite LIDAR waveform data in shallow water</subfield> 
<subfield code="h">[electronic resource] /</subfield> 
<subfield code="c">Neal F. Battaglia.</subfield> 
</datafield> 
<datafield tag="260" ind1=" " ind2=" "> 
<subfield code="a">Monterey, California :</subfield> 
<subfield code="b">Naval Postgraduate School,</subfield> 
<subfield code="c">2010.</subfield> 
</datafield> 
<datafield tag="300" ind1=" " ind2=" "> 
<subfield code="a">xvi, 67 p. :</subfield> 
<subfield code="b">ill. (some col.) ;</subfield> 
<subfield code="c">28 cm.</subfield> 
</datafield> 
<datafield tag="500"> 
<subfield code="a">Thesis Advisor(s): Olsen, Richard C. ; Second Reader: Trask, David M.</subfield> 
</datafield> 
<datafield tag="500"> 
<subfield code="a">"June 2010."</subfield> 
</datafield> 
<datafield tag="500”> 
<subfield code="a">Author(s) subject terms: LIDAR Waveforms, Underwater LIDAR signature, Spaceborne LIDAR.</subfield> 
</datafield> 
</record> 
</collection> 

回答

0

不是VB的家伙,但是这应该工作:

Dim xd As XDocument = XDocument.Load("C:\Users\stopete\Desktop\Marc_conv ertxml.xml") 
If xd IsNot Nothing Then 
Dim datafields = From datafield In xd.Descendants("datafield") 
Where (datafield.Attribute("tag").Value = "500") 
Select datafield 
Skip 1 
Take 1 

或者,如果你不想改变查询:

MsgBox(xEle.Elements.Skip(1).Take(1).Single().Value) 
0
Dim xd As XDocument = XDocument.Load(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "XMLFile1.xml"), LoadOptions.None) 
     If xd IsNot Nothing Then 


      Dim ele As XElement = xd.Descendants("datafield").Where(Function(a) a.Attribute("tag").Value = "500")(1) 

      MsgBox(ele.Value) 


     End If