Inquiridor
Dúvidas sobre XML

Pergunta
-
Caros,
Estou fazendo um XML Schema, e gostaria que validasse um elemento com a somatória de outros dois, exemplo:
<root>
<Qtde1></Qtde1> <!-- Valor 1 -->
<Qtde2></Qtde2> <!-- Valor 2 -->
<Total></Total> <!-- Validação para a somatória de Qtde1 + Qtde2 -->
</root>
Seria possível?
Uma outra dúvida é se existe a possibilidade de fazer uma validação para que um campo código seja sempre sequencial, por exemplo:
<!-- Correto -->
<root>
<codigo>1</codigo>
<codigo>2</codigo>
<codigo>3</codigo>
</root>
<!-- Incorreto -->
<root>
<codigo>1</codigo>
<codigo>3</codigo>
<codigo>2</codigo>
<codigo>10</codigo>
</root>Espero ter sido claro.
Obrigado,
Vinicius Dias Medeiros
Todas as Respostas
-
Vinicius Medeiros wrote: Caros,
Estou fazendo um XML Schema, e gostaria que validasse um elemento com a somatória de outros dois, exemplo:
<root>
<Qtde1></Qtde1> <!-- Valor 1 -->
<Qtde2></Qtde2> <!-- Valor 2 -->
<Total></Total> <!-- Validação para a somatória de Qtde1 + Qtde2 -->
</root>
Seria possível?Qual é a linguagem? Vai em VB.
Dim xString As String = "<root>" & _
"<Qtde1>1</Qtde1> <!-- Valor 1 -->" & _
"<Qtde2>2</Qtde2> <!-- Valor 2 -->" & _
"<Total>3</Total> <!-- Validação para a somatória de Qtde1 + Qtde2 -->" & _
"</root>"
Dim xDoc As New XmlDocument()
xDoc.LoadXml(xString)
Dim nodeQTD1 As XmlNode = xDoc.SelectSingleNode("root/Qtde1")
Dim nodeQTD2 As XmlNode = xDoc.SelectSingleNode("root/Qtde2")
Dim nodeTotal As XmlNode = xDoc.SelectSingleNode("root/Total")
Dim somaQTds As Integer = Convert.ToInt32(nodeQTD1.InnerText) + Convert.ToInt32(nodeQTD2.InnerText)
If somaQTds = Convert.ToInt32(nodeTotal.InnerText) Then
MessageBox.Show("Validação bem-sucedida")
Else
MessageBox.Show("Validação falhou")
End If
Se os elementos puderem estar vazios, é preciso fazer uma verificação antes de tentar converter a string para número..
Vinicius Medeiros wrote:
Uma outra dúvida é se existe a possibilidade de fazer uma validação para que um campo código seja sempre sequencial, por exemplo:
<!-- Correto -->
<root>
<codigo>1</codigo>
<codigo>2</codigo>
<codigo>3</codigo>
</root>
<!-- Incorreto -->
<root>
<codigo>1</codigo>
<codigo>3</codigo>
<codigo>2</codigo>
<codigo>10</codigo>
</root>Espero ter sido claro.
Dim xString As String = "<root>" & _
"<codigo>1</codigo>" & _
"<codigo>2</codigo>" & _
"<codigo>3</codigo>" & _
"<codigo>4</codigo>" & _
"<codigo>5</codigo>" & _
"</root>"
Dim xDoc As New XmlDocument()
xDoc.LoadXml(xString)
Dim nodeList As XmlNodeList = xDoc.GetElementsByTagName("codigo")
Dim seq As Integer = Nothing
For Each node As XmlNode In nodeList
If Not seq.Equals(Nothing) Then
If Convert.ToInt32(node.InnerText) <> seq + 1 Then
MessageBox.Show("Fora de seqüência")
Return
End If
End If
seq = Convert.ToInt32(node.InnerText)
Next
MessageBox.Show("Os códigos estão em seqüência")
-
-