son - Encuentra a través de múltiples atributos en XML
etiquetas xml (4)
Intento buscar atributos múltiples en XML:
<APIS>
<API Key="00001">
<field Username="username1" UserPassword="password1" FileName="Filename1.xml"/>
<field Username="username2" UserPassword="password2" FileName="Filename2.xml"/>
<field Username="username3" UserPassword="password3" FileName="Filename3.xml"/>
</API>
</APIS>
Necesito comprobar si en el "campo" los valores Username AND UserPassword son ambos lo que estoy comparando con mis valores de Dataset, ¿hay alguna manera en la que pueda verificar múltiples atributos (Y condición) sin escribir mi propia lógica de usar Flags y romper fuera de bucles.
¿Existe una función integrada de XMLDoc que lo haga? ¡Cualquier ayuda sería apreciada!
La búsqueda de XML es para lo que se creó XPath . No especificó qué idioma está usando, pero aquí hay un artículo sobre el procesamiento de XML usando XPath en Java, y aquí hay uno que usa C #.
Para buscar lo que desea en el fragmento de XML que proporcionó, necesitaría la siguiente expresión XPath:
/APIS/API/field[@Username=''username1'' and @UserPassword=''password1'']
Esto devolvería algo, si el nombre de usuario y la contraseña coinciden, o no si no lo hacen.
Por supuesto, la expresión XPath es solo una cadena; puede compilarla dinámicamente con valores que se ingresaron en un campo de formulario, por ejemplo.
Si dices en qué idioma / entorno te encuentras, es probable que los ejemplos de código publicados aquí sean más específicos.
Esta es una forma de hacerlo en C # (VB.NET es análogo):
// make sure the following line is included in your class
using System.Xml;
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("your XML string or file");
string xpath = "/APIS/API/field[@Username=''{0}'' and @UserPassword=''{1}'']";
string username = "username1";
string password = "password1";
xpath = String.Format(xpath, username, password);
XmlNode userNode = xmldoc.SelectSingleNode(xpath);
if (userNode != null)
{
// found something with given user name and password
}
else
{
// username or password incorrect
}
Tenga en cuenta que ni los nombres de usuario ni las contraseñas pueden contener comillas simples, o el ejemplo anterior fallará. Aquí hay información sobre esta peculiaridad .
También hay un How-To de Microsoft disponible: CÓMO: Utilizar el System.Xml.XmlDocument Class para ejecutar consultas XPath en Visual C # .NET
Esta es una pregunta frecuente sobre expresiones XPath .
Una o más expresiones XPath (cuyo tipo evaluado es booleano) se pueden conectar juntas usando los operadores booleanos "y" y "o" y usando la función XPath not () .
Tenga en cuenta que los nombres de estos están todos en minúsculas . XPath distingue entre mayúsculas y minúsculas y cualquier otra mayúscula de estos nombres (como "Y") no se reconocerá como el nombre de los operadores lógicos.
Entonces, en este caso particular, la expresión XPath deseada será algo como lo siguiente:
/*/*/field[@Username = your-ds-username and @UserPassword = your-ds-UserPassword]
donde your-ds-username
y your-ds-UserPassword
deberían sustituirse por los valores respectivos que desea usar del conjunto de datos.
Para buscar atributos múltiples en el caso de una etiqueta XML, podemos usar el siguiente campo XPATH / APIS / API / [@ Username = ''username1''] [@ UserPassword = ''password1'']