none
Dúvidas sobre XML RRS feed

  • 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

     

    sexta-feira, 16 de fevereiro de 2007 14:38

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")
    sábado, 17 de fevereiro de 2007 01:32
  •  

    Caro Angus,

    Agradeço o seu exemplo, mas acontece q a validação tem q ser através do schema. 

    É possível fazer isto dentro do schema, ou seja, do arquivo .xsd?

    obrigado,

    Vinícius Medeiros

    quinta-feira, 22 de fevereiro de 2007 16:35
  • Que eu saiba, não.
    quinta-feira, 22 de fevereiro de 2007 22:15