Ottieni un valore di attributo dalla risposta XML in apim di azzurro

Ottieni un valore di attributo dalla risposta XML in apim di azzurro

La soluzione per ottenere un valore di attributo dalla risposta XML in apim azzurro
è indicata di seguito:

Ho una risposta xml memorizzata in response-variable-name come:

<VS>
<V>
<B n="1" v="X"/>
<B n="2" v="Y"/>
<B n="3" v="Z"/>
<B n="4" v="XX"/>
<B n="5" v="YY"/>
<B n="6" v="ZZ"/>
</V>
</VS>

Voglio analizzare questa risposta xml e ottenere il valore di v dove n=3 utilizzando la policy apim.
Il vincolo è che non riesco a convertire questa risposta in JSON e quindi ottenere il risultato desiderato.

A seconda di come sono organizzati esattamente gli spazi dei nomi nel codice XML di seguito potrebbe essere leggermente semplificato, ma dovrebbe funzionare altrettanto bene:

<set-variable name="test" value="@(
    context.Request.Body.As<XElement>()
        .Descendants()
        .FirstOrDefault(x => x.Name.LocalName == "B" && x.Attributes().FirstOrDefault(a => a.Name.LocalName == "n")?.Value == "3")?
        .Attributes()
        .FirstOrDefault(a => a.Name.LocalName == "v")?
        .Value
)" />

Usa XML Linq con un dizionario :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication195
{
    class Program
    {
        const string FILENAME = @"c:temptest.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            Dictionary<int, string> dict = doc.Descendants("B")
                .GroupBy(x => (int)x.Attribute("n"), y => (string)y.Attribute("v"))
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());
        }
    }
}