I have a collection of OpenStruct elements using which I need to build an XML with help of Nokogiri. \[code\]collection = [OpenStruct.newcatalogStoreNumber => '657758',:catalogStoreId => 'CTH6536',:catalogStoreLocation => 'UnitedStates', :catalogOwnerId => 'TYCT11190',:catalogOwner => 'McGrawHill Pub.',:catalogList => OpenStruct.new( :catalogProductInfo => OpenStruct.new( roductType => 'Book', roductName => 'The Client', roductAuthorized => 'Y', roductId => 'BKSUS113246A', roductVerificationCode => '4546747', roductPurcTransactionTime => '2012-05-21T13:36:38+05:30', roductAuditDetails => OpenStruct.new( roductAuditNo => '1', rodHandledByUser => 'StoreUserS14', roductAuditTime => '2012-05-21T13:36:38+05:30', roductAuditAdminId => 'McGr1132', roductPurchaseRate => '50.14 Prcnt', roductSystemLoggerId => 'UNX-NETW4536' ), roductAuditDetails => OpenStruct.new( roductAuditNo => '2', rodHandledByUser => 'OnlineUserOn008', roductAuditTime => '2012-05-23T16:16:08+05:30', roductAuditAdminId => 'McGr1132', roductPurchaseRate => '84.86 Prcnt', roductSystemLoggerId => 'UNX-NETW4536' ) ),:catalogProductInfo => OpenStruct.new( roductType => 'Pen', roductName => 'Reynolds' roductAuthorized => 'N', roductId => 'PNSUS228886B', roductVerificationCode => '2330076', roductPurcTransactionTime => '2012-04-22T15:06:18+04:30', roductAuditDetails => OpenStruct.new( roductAuditNo => '1', rodHandledByUser => 'CCUserA14', roductAuditTime => '2012-04-26T13:36:38+05:30', roductAuditAdminId => 'ReyGr1132', roductPurchaseRate => '20.19 Prcnt', roductSystemLoggerId => 'WIN-NETW4536' ) ) ))] \[/code\]I tried with below code .. as per your answer (handpick of elements)\[code\]builder = Nokogiri::XML::Builder.new do |xml| xml.CatalogOrder do collection.each do |ctlg| xml.CatalogStoreNumber ctlg.catalogStoreNumber xml CatalogStoreId ctlg.catalogStoreId xml.CatalogOwnerId ctlg.catalogOwnerid xml.CatalogOwner ctlg.catalogOwner xml.CatalogList do prod_count = 0 aud_list_count = 0 collection.each do |prod| info = prod.catalogList[0].catalogProductInfo xml.ProductInfo do xml.ProductType info.productType xml.ProductName info.productName xml.ProductId info.productId xml.ProductVerificationCode info.ProductVerificationCode xml.ProductPurcTransactionTime info.productPurcTransactionTime xml.ProductAuditDetails do collection.each do |aud_dtl| aud_info = aud_dtl.catalogList[0].catalogProductinfo[0].productAuditDetails xml.ProductAuditNo aud_info.productAuditNo xml.ProdHandledByUser aud_info.prodHandledByUser xml.ProductAuditTime aud_info.productAuditTime xml.ProductAuditAdminId aud_info.productAuditAdminId xml.ProductPurchaseRate aud_info.productPurchaseRate xml.ProductSystemLoggerId aud_info.productSystemLoggerId # Do whatever you must above to concoct your ProductId end aud_list_count = aud_list_count + 1 end prod_count = prod_count + 1 end end end puts builder.to_xml\[/code\]I need the Output as below...\[code\]<CatalogOrder> <CatalogStoreNumber>657758</CatalogStoreNumber> <CatalogStoreId>CTH6536</CatalogStoreId> <CatalogStoreLocation>UnitedStates</CatalogStoreLocation> <CatalogOwnerId>TYCT11190</CatalogOwnerId> <CatalogOwner>McGrawHill Pub.</CatalogOwner> <CatalogList> <CatalogProductInfo> <ProductType>Book</ProductType> <ProductName>The Client</ProductName> <ProductAuthorized>Y</ProductAuthorized> <ProductId>BKSUS113246A</ProductId> <ProductVerificationCode>4546747</ProductVerificationCode> <ProductPurcTransactionTime>2012-05-21T13:36:38+05:30</ProductPurcTransactionTime> <ProductAuditDetails> <ProductAuditNo>1</ProductAuditNo> <ProdHandledByUser>StoreUserS14</ProdHandledByUser> <ProductAuditTime>2012-05-21T13:36:38+05:30</ProductAuditTime> <ProductAuditAdminId>McGr1132</ProductAuditAdminId> <ProductPurchaseRate>50.14 Prcnt</ProductPurchaseRate> <ProductSystemLoggerId>WIN-NETW4536</ProductSystemLoggerId> </ProductAuditDetails> <ProductAuditDetails> <ProductAuditNo>2</ProductAuditNo> <ProdHandledByUser>OnlineUserOn008</ProdHandledByUser> <ProductAuditTime>2012-05-23T16:16:08+05:30</ProductAuditTime> <ProductAuditAdminId>McGr1132</ProductAuditAdminId> <ProductPurchaseRate>84.86 Prcnt</ProductPurchaseRate> <ProductSystemLoggerId>UNX-NETW4536</ProductSystemLoggerId> </ProductAuditDetails> </CatalogProductInfo> <CatalogProductInfo> <ProductType>Pen</ProductType> <ProductName>Reynolds</ProductName> <ProductAuthorized>N</ProductAuthorized> <ProductId>PNSUS228886B</ProductId> <ProductVerificationCode>2330076</ProductVerificationCode> <ProductPurcTransactionTime>2012-04-22T15:06:18+04:30</ProductPurcTransactionTime> <ProductAuditDetails> <ProductAuditNo>1</ProductAuditNo> <ProdHandledByUser>CCUserA14</ProdHandledByUser> <ProductAuditTime>2012-04-26T13:36:38+05:30</ProductAuditTime> <ProductAuditAdminId>ReyGr1132</ProductAuditAdminId> <ProductPurchaseRate>20.19 Prcnt</ProductPurchaseRate> <ProductSystemLoggerId>WIN-NETW4536</ProductSystemLoggerId> </ProductAuditDetails> </CatalogProductInfo> </CatalogList></CatalogOrder> \[/code\]I tried to loop in the nested Array of OpenStruct of elements, but couldn't land on right logic for that .. Ref.. How to add child nodes in NodeSet using Nokogiri