No estoy seguro de cómo extraer contenido cuando hay varios elementos secundarios opcionales con el mismo nombre.
user_defined_text_field continuación.Esperemos que el siguiente ejemplo proporcione el contexto relevante.
FORMA DE DATOS
(Desde una API de un servicio)
<api> <response> <service>api_search</service> <individuals count="1"> <individual id="1"> <first_name>James</first_name> <last_name>Jones</last_name> <email>jjones@gmail.com</email> <gender>M</gender> <user_defined_text_fields> <user_defined_text_field> <name>udf_text_1</name> <label>Fav Color</label> <text>Blue</text> // ****** I WANT THIS ****** <admin_only>false</admin_only> </user_defined_text_field> <user_defined_text_field> <name>udf_text_3</name> <label>Area</label> <text>Urban</text> <admin_only>false</admin_only> </user_defined_text_field> </user_defined_text_fields> </individual> </individuals> </response>PORCIÓN ACTUAL DEL CÓDIGO PARA EXTRAER DATOS RELEVANTES
(Dentro de Google Script. Todo funciona perfectamente; solo necesito ayuda con la línea que he comentado a continuación).
// ... const entries = fetch.getRootElement().getChild('response').getChild('individuals').getChildren(); const list = new Array(); for (let i in entries) { const first_name = entries[i].getChildText('first_name'); const last_name = entries[i].getChildText('last_name'); const email = entries[i].getChildText('email'); const gender = entries[i].getChildText('gender'); const fav_color = ??? // ****** NEED HELP HERE ****** list.push([first_name, last_name, email, gender]); }; // ...Descripción
Dado que user_defined_text_fields contiene una matriz de user_defined_text_field , debe recorrer la matriz de elementos secundarios para llegar al que tiene el color.
Guion
for (let i in entries) { var first_name = entries[i].getChildText('first_name'); var last_name = entries[i].getChildText('last_name'); var email = entries[i].getChildText('email'); var gender = entries[i].getChildText('gender'); var fields = entries[i].getChild("user_defined_text_fields"); var children = fields.getChildren("user_defined_text_field"); if( children ) { for( var j=0; j<children.length; j++ ) { if( children[j].getChildText("label") === "Fav Color" ) { var fav_color = children[j].getChildText("text"); break; } } } }Referencia