Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 251
  • Last Modified:

Xml Get subelements to Datagridview

I have this code but only return the first line of each element InvoiceNum. For ex. Invoicenum 154 has two lines, but i can get only one line, the first. How can get all lines from each invoice.

<Documents>
	   <Sales>
		<Total>81678.600000</Total>
		<Invoice>
			<InvoiceNum>153</InvoiceNum>
			<Date>2013-03-01</Date>
			<Customer>2589</Customer>
			<Line>
				<ProductId>AT.02-2584</ProductId>
				<Description>Product 1</Description>
				<Quantity>1.000</Quantity>
				<UnitPrice>265.140000</UnitPrice>
			</Line>
		</Invoice>		
		<Invoice>
			<InvoiceNum>154</InvoiceNum>
			<Date>2013-03-01</Date>
			<Customer>2589</Customer>
			<Line>
				<ProductId>AT.02-2584</ProductId>
				<Description>Product 1</Description>
				<Quantity>1.000</Quantity>
				<UnitPrice>265.140000</UnitPrice>
			</Line>
                        <Line>
				<ProductId>AT.02-2599</ProductId>
				<Description>Product 2</Description>
				<Quantity>1.000</Quantity>
				<UnitPrice>85.100000</UnitPrice>
			</Line>
		</Invoice>	
	</Sales>
</Documents>

Open in new window

filepath1 = "C:\Users\Documents\WorkP\March2013.xml"
       Dim XmlDoc As XDocument = RemoveXmlNamespace(XDocument.Load(filepath1))
        Dim query = From xe In XmlDoc.Descendants("Invoice")
              Where xe.Element("InvoiceNo").Value = "154"
              Select New With {
                 .Factura = xe.Element("InvoiceNo").Value,
                 .Cliente = xe.Element("CustomerID").Value,
                 .Produto = xe.Element("Line").Element("ProductCode").Value
              }
        DataGridView1.DataSource = query.ToArray

Open in new window

0
rflorencio
Asked:
rflorencio
  • 5
  • 2
1 Solution
 
Meir RivkinFull stack Software EngineerCommented:
here:
filepath1 = "C:\Users\Documents\WorkP\March2013.xml"
       Dim XmlDoc As XDocument = RemoveXmlNamespace(XDocument.Load(filepath1))
        Dim query = From xe In XmlDoc.Descendants("Invoice")
              Where xe.Element("InvoiceNo").Value = "154"
              Select New With {
                 .Factura = xe.Element("InvoiceNo").Value,
                 .Cliente = xe.Element("CustomerID").Value,
                 .Produto = xe.Element("Line").Elements("ProductCode").Select(n=>n.Value)
              }
        DataGridView1.DataSource = query.ToArray

Open in new window

0
 
Meir RivkinFull stack Software EngineerCommented:
look at line 8, instead of :
.Produto = xe.Element("Line").Element("ProductCode").Value

Open in new window

i used
.Produto = xe.Element("Line").Elements("ProductCode").Select(n=>n.Value)

Open in new window

so it returns for each line in the invoicenum, the ProductCode value.
0
 
Meir RivkinFull stack Software EngineerCommented:
now that i look at the xml there's no ProductCode element inside Line element.
did u mean u have ProductId?
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
rflorencioAuthor Commented:
I have two xml files one with ProductCode and another with ProductId. I'm a little confused (with Linq and Collections), what should put where is "n"  in the code ".Select(n=>n.Value) ".
0
 
Meir RivkinFull stack Software EngineerCommented:
I made a mistake, it should be:
 
.Produto = xe.Elements("Line").Select(n=>n.Element("ProductCode").Value)

Open in new window

this little linq code means loop through line elements and for each get productcode value.
The reason u got only the 1st one is cause u called xe.Element("Line") and not xe.Elements("Line").
xe.Element("Line") return the first one if exists.
0
 
rflorencioAuthor Commented:
Sorry. Something is wrong with me. With the code provided ".Produto = xe.Elements("Line").Select(n=>n.Element("ProductCode").Value)", an error occurs saying "n is not declared".
0
 
Meir RivkinFull stack Software EngineerCommented:
Sorry its c# i need to convert it to vb.net
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

  • 5
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now