【问题标题】:Getting value of an xml element by name using Xdocument使用 Xdocument 按名称获取 xml 元素的值
【发布时间】:2013-04-17 16:23:38
【问题描述】:

我有以下 xml:

<?xml version="1.0" encoding="UTF-8"?>
<video contenttype="asf" fileextension=".wmv" hascontent="no" lang="en-GB" length="430" pid="45202118763477" sid="">
    <lastmodified timestamp="1366113600000">
        Tue, 16 Apr 2013 12:00:00 +0000
    </lastmodified>
    <links/>
    <keywords/>
    <slides/>
    <copyright>
        Copyright owned by original broadcaster
    </copyright>
    <title>
        BBC News
    </title>
    <comment>
        The latest news updates from around the world.
    </comment>
    <author>
        BBC World Sv_
    </author>
    <email/>
    <captioning/>
    <extendeddata>
        <data name="keepOriginal">
            0
        </data>
        <data name="keepTranscoded">
            0
        </data>
        <data name="realStartTime">
            1366113604
        </data>
        <data name="scheduledStartTime">
            1366113600
        </data>
        <data name="broadcastLength">
            360
        </data>
        <data name="broadcastChannel">
            BBC World Sv_
        </data>
        <data name="paddingUsed">
            0
        </data>
        <data name="transcodingSpec"/>
        <data name="transcoding">
            succeeded
        </data>
        <data name="transcodingProfile">
            -b 2.35M -a 128k --debug  --primary-format mp4 --podcast &quot;-l 270 -b 400 -R 48 -B 64&quot; --keep-files true
        </data>
        <data name="transcoderDetails">
            ver 1.58.2.5, 2013-04-16  13:08:08 up 42 days, 12:00,  0 users,  load average: 0.35, 0.13, 0.07, OS20031 212.70.71.204
        </data>
        <data name="originalFilename">
            /var/lib/etvd/mpegts/BBC World Sv_/BBC News (16-Apr-2013 13.00).emcast
        </data>
        <data name="originalRecordingTime">
            created 2013-04-16 , last modified 2013-04-16 : recording lasted 0s
        </data>
        <data name="primaryFormat">
            mp4
        </data>
        <data name="doXml">
            True
        </data>
        <data name="doFiles">
            True
        </data>
    </extendeddata>
    <categories>
        <category name="em:podcast">
            mp4
        </category>
    </categories>
</video>

使用 XDocument,我可以进入 &lt;extendeddata&gt;fine 的后代,它返回所有数据节点和值,但我如何根据数据属性的名称专门获取一个值?所以例如我想进入一个特定的元素,例如:&lt;data-name="realStartTime"&gt;1366113604&lt;/data&gt; 是 1366113604 作为我想退出的值。

干杯

【问题讨论】:

    标签: xml linq-to-xml


    【解决方案1】:

    基本上你需要过滤你想要的一个元素。一旦你调用了Descendants,你就有了一个元素的集合,你需要过滤出具有name 属性值为realStartTime 的元素。这是实现这一目标的一种方法:

    var realStartTime =
        xdoc.Descendants("data")
            .Single(x => x.Attribute("name").Value == "realStartTime")
            .Value
            .Trim();
    

    realStartTime 的值将是 1366113604

    【讨论】:

    • 完美!非常感谢。
    【解决方案2】:

    获得extendeddata 元素后,您需要像这样在name 属性上过滤子data 元素

    var doc = XDocument.Parse(...);
    
    var result = doc.Descendants("extendeddata")
        .Elements()
        .Single(x => x.Attribute("name") != null && x.Attribute("name").Value == "realStartTime")
        .Value;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多