Obtenga un valor de atributo de la respuesta XML en Azure Apim

 C Programming >> Programación C >  >> Tags >> Azure
Obtenga un valor de atributo de la respuesta XML en Azure Apim

La solución para obtener un valor de atributo de la respuesta XML en azure apim
se proporciona a continuación:

Tengo una respuesta xml almacenada en nombre de variable de respuesta como:

<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>

Quiero analizar esta respuesta xml y obtener el valor de v donde n=3 usando la política de apim.
La restricción es que no puedo convertir esta respuesta a JSON y luego obtener el resultado deseado.

Dependiendo de cómo se organicen exactamente los espacios de nombres en su código XML a continuación, puede simplificarse un poco, pero debería funcionar igual de bien:

<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 diccionario:

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());
        }
    }
}