none
Hacer referencia a atributo de un nodo XML VB:NET

    Pregunta

  • Hola! tengo un problema y esparaba pudieran ayudarme.

    Tengo el siguiente XML

     <lineItem number="000001">
                                                                    <netPrice>
                                                                            <amount currencyISOcode="CLP">19368</amount>
                                                                    </netPrice>
                                                                    <PriceType>LIU</PriceType>
                                                                    <requestedQuantity UnitType="CS">10</requestedQuantity>
                                                                    <containedUnits UnitType="SIN">24</containedUnits>
                                                                    <allowanceCharge allowanceOrChargeType="ALLOWANCE">
                                                                            <monetaryAmountOrPercentage>
                                                                                    <percentage>1</percentage>
                                                                            </monetaryAmountOrPercentage>
                                                                            <monetaryAmountOrPercentage>
                                                                                    <amount currencyISOcode="CLP">1937</amount>
                                                                            </monetaryAmountOrPercentage>
                                                                    </allowanceCharge>
                                                                    <allowanceCharge allowanceOrChargeType="ALLOWANCE">
                                                                            <monetaryAmountOrPercentage>
                                                                                    <percentage>2</percentage>
                                                                            </monetaryAmountOrPercentage>
                                                                            <monetaryAmountOrPercentage>
                                                                                    <amount currencyISOcode="CLP">2789</amount>
                                                                            </monetaryAmountOrPercentage>
                                                                    </allowanceCharge>
                                                                    <itemIdentification>
                                                                            <gtin>321</gtin>
                                                                    </itemIdentification>
                                                                    <itemDescription language="SP">
                                                                            <text>texto</text>
                                                                    </itemDescription>
                                                                    <totalAmount>
                                                                            <amount currencyISOcode="CLP">146422</amount>
                                                                    </totalAmount>
                                                            </lineItem>
                                                            <lineItem number="000002">
                                                                    <netPrice>
                                                                            <amount currencyISOcode="CLP">321</amount>
                                                                    </netPrice>
                                                                    <PriceType>LIU</PriceType>
                                                                    <requestedQuantity UnitType="CS">30</requestedQuantity>
                                                                    <containedUnits UnitType="SIN">24</containedUnits>
                                                                    <allowanceCharge allowanceOrChargeType="ALLOWANCE">
                                                                            <monetaryAmountOrPercentage>
                                                                                    <percentage>3</percentage>
                                                                            </monetaryAmountOrPercentage>
                                                                            <monetaryAmountOrPercentage>
                                                                                    <amount currencyISOcode="CLP">1937</amount>
                                                                            </monetaryAmountOrPercentage>
                                                                    </allowanceCharge>
                                                                    <allowanceCharge allowanceOrChargeType="ALLOWANCE">
                                                                            <monetaryAmountOrPercentage>
                                                                                    <percentage>4</percentage>
                                                                            </monetaryAmountOrPercentage>
                                                                            <monetaryAmountOrPercentage>
                                                                                    <amount currencyISOcode="CLP">2789</amount>
                                                                            </monetaryAmountOrPercentage>
                                                                    </allowanceCharge>
                                                                    <itemIdentification>
                                                                            <gtin>32131</gtin>
                                                                    </itemIdentification>
                                                                    <itemDescription language="SP">
                                                                            <text>texto</text>
                                                                    </itemDescription>
                                                                    <totalAmount>
                                                                            <amount currencyISOcode="CLP">439266</amount>
                                                                    </totalAmount>
                                                            </lineItem>

    Si se fijan dentro de cada "LineItem" hay una Eqtiqueta llamada "allowanceCharge " que puede repetirse varias veces. Para recorrer los "lineitem" lo estoy haciendo con un loop, el problema empieza cuando trato de hacer el loop para "allowanceCharge" ya que recorre los valores de todos los "lineitem" y no solo del actual.

    El atributo number de "lineItem" lo he capturado, pero necesito saber como hacer referencia a este a la hora de llamar al siguiente loop.

                    nodes = xmlDoc.DocumentElement.SelectNodes("body/eanucc:transaction/command/eanucc:documentCommand/documentCommandOperand/eanucc:order/lineItem", ns)
                    Dim netPrice As String = "", PriceType As String = "", requestedQuantity As String = "", containedUnits As String = "", itemIdentification As String = "", itemDescription As String = "", totalAmount As String = ""
                    For Each node As XmlNode In nodes
    
                        'CAPTURO EL ATRIBUTO "number" DEL NODO
                        Dim number As String = node.Attributes.GetNamedItem("number").Value.ToString
    
                        netPrice = node.SelectSingleNode("netPrice").InnerText
                        PriceType = node.SelectSingleNode("PriceType").InnerText
                        requestedQuantity = node.SelectSingleNode("requestedQuantity").InnerText
    
                        containedUnits = node.SelectSingleNode("containedUnits").InnerText
                        itemIdentification = node.SelectSingleNode("itemIdentification").InnerText
                        itemDescription = node.SelectSingleNode("itemDescription").InnerText
                        totalAmount = node.SelectSingleNode("totalAmount").InnerText
                        DatosGv.Rows.Add(netPrice, PriceType, requestedQuantity, containedUnits, itemIdentification, itemDescription, totalAmount)
    
    
                        'ACA ES DONDE DEBO HACER REFERENCIA AL ATRIBUTO "number"
                        Dim Nodes2 As XmlNodeList = xmlDoc.DocumentElement.SelectNodes("body/eanucc:transaction/command/eanucc:documentCommand/documentCommandOperand/eanucc:order/lineItem/allowanceCharge", ns)
                        For Each node2 As XmlNode In Nodes2
    
                            'Aca recorre todos los valores. Se supone que deberia recorrer los valores donde el atributo sea igual a la variable "number"
    
                        Next
                    Next
    
                    GridView1.DataSource = DatosGv
                    GridView1.DataBind()

    De antemano muchas gracias por sus respuestas.

    martes, 28 de febrero de 2017 13:16

Respuestas

  • Ya lo solucioné con la siguiente linea

    Dim Nodes2 As XmlNodeList = xmlDoc.DocumentElement.SelectNodes("body/eanucc:transaction/command/eanucc:documentCommand/documentCommandOperand/eanucc:order/lineItem[@number='" & number & "']/allowanceCharge", ns)

    • Marcado como respuesta Patricio Andia martes, 28 de febrero de 2017 14:59
    martes, 28 de febrero de 2017 14:59

Todas las respuestas

  • Hola. Una pregunta... Tienes el esquema xsd de ese xml? Lo digo porque podrías generar clases en VB desde dicho esquema y poder trabajar con clases.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 28 de febrero de 2017 13:53
  • Ya lo solucioné con la siguiente linea

    Dim Nodes2 As XmlNodeList = xmlDoc.DocumentElement.SelectNodes("body/eanucc:transaction/command/eanucc:documentCommand/documentCommandOperand/eanucc:order/lineItem[@number='" & number & "']/allowanceCharge", ns)

    • Marcado como respuesta Patricio Andia martes, 28 de febrero de 2017 14:59
    martes, 28 de febrero de 2017 14:59