我正在制作一个程序,从 XML 文件中提取数据并将其存储在 listView 中,问题是如果它找到超过 1 个属性,我必须在下一行中重复元素的值或将其留空。
我附上了我的代码,如果它只在元素上找到一个属性,它就可以完美地工作。
Try
Dim m_xmld As XmlDocument
Dim m_nodelist As XmlNodeList
Dim m_nodelist1 As XmlNodeList
Dim m_node As XmlNode
'Creamos el "XML Document"
m_xmld = New XmlDocument()
'Cargamos el archivo
m_xmld.Load(Trim(txtDirectorio.Text))
'Obtenemos la lista de los nodos "name"
m_nodelist = m_xmld.GetElementsByTagName("cfdi:InformacionAduanera")
m_nodelist1 = m_xmld.GetElementsByTagName("cfdi:Concepto")
'Recorrer XML sacar más de un NoIdentificacion
For Each m_node In m_nodelist1
lvNoIdentificacion.Items.Add(m_node.Attributes.GetNamedItem("NoIdentificacion").Value)
Next
'Recorrer XML sacar más de un NumeroPedimento
For Each m_node In m_nodelist
lvNumeroPedimento.Items.Add(m_node.Attributes.GetNamedItem("NumeroPedimento").Value)
Next
'Recorrer los item de la lista
'Verificar que contenga 15 digitos el NumeroPedimento (Length=21 por los espacios en blanco entre grupos de digitos)
'Si el NumeroPedimento no contiene cadena de 15 digitos entonces pintar color Rojo.
Dim i As Integer
For i = 0 To lvNumeroPedimento.Items.Count - 1
If lvNumeroPedimento.Items(i).Text.Length <> 21 Then
lvNumeroPedimento.Items.Item(i).ForeColor = System.Drawing.Color.Red
Else
lvNumeroPedimento.Items.Item(i).ForeColor = System.Drawing.Color.Black
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
XML 的结构如下
<cfdi:Concepto ClaveProdServ="43223300" NoIdentificacion="AX101100" Cantidad="4" ClaveUnidad="KT" Unidad="kit" Descripcion="Kit Separador de Fibra en campo P/6 Fibras" ValorUnitario="612.00" Importe="2448.00" Descuento="678.34">
<cfdi:Impuestos>
<cfdi:Traslados>
<cfdi:Traslado Base="1769.66" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="283.15" />
</cfdi:Traslados>
</cfdi:Impuestos>
<cfdi:InformacionAduanera NumeroPedimento="XX XX 38XX 4XX1254" />
<cfdi:InformacionAduanera NumeroPedimento="XX XX 38XX 400XX41" />
</cfdi:Concepto>
预先非常感谢您。
使用此代码,我设法解决了我的问题,以防有人提供帮助。
结果如何: