Encontrar através de vários atributos em XML

votos
7

Eu estou tentando pesquisar vários atributos em 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>

Eu preciso verificar se no campo os valores usuário e UserPassword são ambos o que eu estou comparando com os meus valores de conjunto de dados, existe uma maneira onde eu possa verificar vários atributos (e condicionar) sem escrever minha própria lógica do uso de bandeiras e quebrando de laçadas.

Existe uma função construída em de XMLDoc que faz isso? Qualquer ajuda seria apreciada!

Publicado 09/12/2008 em 20:04
fonte usuário
Em outras línguas...                            


4 respostas

votos
25

Para procurar o que você quer no trecho de XML que você forneceu, você precisaria a seguinte expressão XPath:

/APIS/API/field[@Username='username1' and @UserPassword='password1']

Isto quer retornar algo, se o nome de usuário e senha de jogo - ou não se não o fizerem.

De couse a expressão XPath é apenas uma string - você pode construí-lo dinamicamente com os valores que foram inseridos em um campo de formulário, por exemplo.

Se você disser que linguagem / ambiente em que está, amostras de código publicados aqui provavelmente irá obter mais específico.

Esta é uma maneira de fazê-lo em C # (VB.NET é análoga):

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

Esteja ciente de que nem os nomes de usuário, nem senhas podem conter aspas simples, ou o exemplo acima irá falhar. Aqui está algumas informações sobre essa peculiaridade .

Há também um How-To do Microsoft disponíveis: COMO: Utilizar a classe System.Xml.XmlDocument para executar consultas XPath no Visual C # .NET

Respondeu 09/12/2008 em 20:32
fonte usuário

votos
2

Pesquisando XML é o que XPath foi feito. Você não especificou o idioma que você está usando, mas aqui está um artigo sobre XML processamento utilizando XPath em Java, e aqui está um usando C #.

Respondeu 09/12/2008 em 20:16
fonte usuário

votos
1

Este é um FAQ sobre o XPath expressões .

Um ou mais expressões XPath (cujos avaliada tipo é booleano), podem ser ligados em conjunto, utilizando os operadores booleanas "e" e "ou" e usando a função XPath não () .

Note que os nomes de todos estes são em letras minúsculas . XPath é sensível a maiúsculas e qualquer outro capitalização destes nomes (como "E") não será reconhecido como o nome dos operadores lógicos.

Então, neste caso particular, a expressão XPath procurado será algo como o seguinte:

/*/*/field[@Username = your-ds-username and @UserPassword = your-ds-UserPassword]

onde your-ds-usernamee your-ds-UserPassworddeve ser substituído com os respectivos valores que pretende utilizar a partir do conjunto de dados.

Respondeu 10/12/2008 em 03:37
fonte usuário

votos
0

Para procurar vários atributos em caso de tag XML, podemos usar o seguinte XPATH / APIS / API / campo [@ nome de usuário = 'username1'] [@ UserPassword = 'password1']

Respondeu 04/11/2014 em 12:23
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more