如何使用Xpath或/和C#基于条件提取xml属性值

时间:2014-02-13 12:09:50

标签: c# xml xpath

从下面的XML中我们如何根据给定的deliveryFormat提取速度'键值'的值。例如deliveryFormat key = 1的速度值为2,3,4,deliveryFormat key = 4的速度值为5,6,4

以下代码为我提供了可用格式的键,并根据这些键我想提取速度键值

XmlDocument results = new XmlDocument();
results.LoadXml(theModel.SearchLog.AvailabilityXML);
var AvailableFormats = results.SelectNodes("//apiResponse/availableFormats/availableFormat/deliveryFormat/@key");

XML

<?xml version="1.0" encoding="UTF-8"?>
<apiResponse>
<availableFormats>
    <availableFormat availabilityDate="2014-01-31">
        <deliveryFormat key="1">Encrypted Download</deliveryFormat>
        <deliveryModifiers/>
        <availableSpeeds>
            <speed key="2">2 Hours</speed>
            <speed key="3">24 Hours</speed>
            <speed key="4">4 Days</speed>
        </availableSpeeds>
        <availableQuality>
            <quality key="1">Standard</quality>
            <quality key="2">High</quality>
        </availableQuality>
    </availableFormat>
    <availableFormat availabilityDate="2014-01-31">
        <deliveryFormat key="4">Paper</deliveryFormat>
        <deliveryModifiers/>
        <availableSpeeds>
            <speed key="5">2 Hours</speed>
            <speed key="6">24 Hours</speed>
            <speed key="4">4 Days</speed>
        </availableSpeeds>
        <availableQuality>
            <quality key="1">Standard</quality>
            <quality key="2">High</quality>
        </availableQuality>
    </availableFormat>
</availableFormats>
</apiResponse>

1 个答案:

答案 0 :(得分:1)

请尝试以下xpath。它为speed提供了所有deliveryFormat 1。您可以根据需要更改键值。

//availableFormat[deliveryFormat/@key='1']//speed

或者,如果您只想要速度键:

//availableFormat[deliveryFormat/@key='1']//speed/@key

编辑:修复了xpath条件