Linq to xml输出元素值 [英] Linq to xml output element value

查看:64
本文介绍了Linq to xml输出元素值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Linq to Xml获得elementat
对不起,下面的长XML示例.下面的XML示例具有两个记录,每个记录具有三个相似的节点(< datafield标签="500").我要完成的工作是获取第二个节点< datafield标签="5000">的值.闲置的代码我得到了所有三个节点的值,但是我想要类似get elementat(1)的东西.感谢您的帮助.
我尝试了此操作,但没有成功MsgBox(xEle.Elements.ElementAt(1).Value)

Linq to Xml get elementat
Sorry for the long XML sample below. The XML sample below has two records and each record has three similar Nodes (<datafield tag="500") What I want to accomplish is get the value of the second Node <datafield tag = "5000">. The fallowing code I gets the value for all three nodes but I want something like get elementat(1). Appreciate your help.
I tried this but it didn’t worked 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 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>

推荐答案

You could Skip the first element if you want the second one specifically like this:

You could Skip the first element if you want the second one specifically like this:

<code>
 Dim datafields = (From datafield In xd.Descendants("datafield")    Where (datafield.Attribute("tag").Value = "500")    Select datafield).Skip(1).First()
</code>



Additionally you could skip as many items as you like, not just the first one.
Hope this helped :) Good luck



Additionally you could skip as many items as you like, not just the first one.
Hope this helped :) Good luck


You can also you an XPath expression in LINQ.
Here is how it can be done :


You can also you an XPath expression in LINQ.
Here is how it can be done :


Dim datafields = (From datafield in xd.XPathSelectElement("//datafield[@tag='500' and position()=2]") _
select datafield)



It will return a single element of Type XElement.



It will return a single element of Type XElement.


这篇关于Linq to xml输出元素值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆