Discussions
Categories
Groups
Community Home
Categories
INTERNAL ENABLEMENT
POPULAR
PUBLIC CLOUD
PRIVATE CLOUD
Quick Links
MY LINKS
HELPFUL TIPS
Back to website
Home
Intelligence (Analytics)
Xpath referencing different XML field
dcbsant
<div>Hi, </div>
<div>I have This XML with two groups with exactly the same structure.</div>
<div>.</div>
<div>.</div>
<div>.</div>
<div><core:ReferenceCoded></div>
<div> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded></div>
<div> <core:ReferenceTypeCodedOther>BuyerProductNumber</core:ReferenceTypeCodedOther></div>
<div> <core:PrimaryReference></div>
<div> <core:RefNum>PR010001</core:RefNum></div>
<div> </core:PrimaryReference></div>
<div></core:ReferenceCoded></div>
<div> </div>
<div> </div>
<div><core:ReferenceCoded></div>
<div> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded></div>
<div> <core:ReferenceTypeCodedOther>EanProductNumber</core:ReferenceTypeCodedOther></div>
<div> <core:PrimaryReference></div>
<div> <core:RefNum>8430469105824</core:RefNum></div>
<div></core:PrimaryReference></div>
<div></core:ReferenceCoded></div>
<div>.</div>
<div>.</div>
<div>.</div>
<div> </div>
<div>I need the value of the value <span style="color:#FF0000;"><core:RefNum></core:RefNum></span> with <span style="color:#FF0000;"><core:ReferenceTypeCodedOther>EanProductNumber</core:ReferenceTypeCodedOther></span> (in this case the value will be 8430469105824)</div>
<div> </div>
<div>If I write this Xpath I have the correct value (8430469105824)</div>
<div> </div>
<div>-<span> </span>core:ReferenceCoded<span style="color:#FF0000;">[2]</span>/core:PrimaryReference/core:RefNum</div>
<div> </div>
<div>But I don't know if the value will be in group 1 or 2 so I can't use [1] or [2]. I need to check the field core:ReferenceTypeCodedOther</div>
<div> </div>
<div>I have tried a lot of combinations but always the same result. No value is shown.</div>
<div> </div>
<div>core:ReferenceCoded[core: ReferenceTypeCodedOther =" EanProductNumber"]/core:PrimaryReference/core:RefNum</div>
<div>core:ReferenceCoded[core: ReferenceTypeCodedOther =' EanProductNumber']/core:PrimaryReference/core:RefNum</div>
<div>core:ReferenceCoded[core: ReferenceTypeCodedOther ==" EanProductNumber"]/core:PrimaryReference/core:RefNum</div>
<div>core:ReferenceCoded[core: ReferenceTypeCodedOther ==' EanProductNumber']/core:PrimaryReference/core:RefNum</div>
<div>core:ReferenceCoded[core: ReferenceTypeCodedOther [text()=" EanProductNumber"]]/core:PrimaryReference/core:RefNum</div>
<div>core:ReferenceCoded[core: ReferenceTypeCodedOther [text()=' EanProductNumber']]/core:PrimaryReference/core:RefNum</div>
<div>core:ReferenceCoded[core: ReferenceTypeCodedOther [text()==" EanProductNumber"]]/core:PrimaryReference/core:RefNum</div>
<div>core:ReferenceCoded[core: ReferenceTypeCodedOther [text()==" EanProductNumber"]]/core:PrimaryReference/core:RefNum</div>
<div>.</div>
<div>.</div>
<div>.</div>
<div>And all similar combinations</div>
<div> </div>
<div>Sorry, I'm new in BIRT and I'm Lost.</div>
<div> </div>
<div>Thank you for your help.</div>
Find more posts tagged with
Comments
Clement Wong
<p>Are you using commercial, or open source BIRT? What version?</p>
<p> </p>
<p>What does the rest of the XML look like?</p>
<p> </p>
<p>Without the rest of your XML, I'm going to assume the following, for my example as one possible solution:</p>
<pre class="_prettyXprint">
<?xml version="1.0" encoding="UTF-8"?>
<sample xmlns:core="www.sample.com">
<core:ReferenceCoded>
<core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded>
<core:ReferenceTypeCodedOther>BuyerProductNumber</core:ReferenceTypeCodedOther>
<core:PrimaryReference>
<core:RefNum>PR010001</core:RefNum>
</core:PrimaryReference>
</core:ReferenceCoded>
<core:ReferenceCoded>
<core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded>
<core:ReferenceTypeCodedOther>EanProductNumber</core:ReferenceTypeCodedOther>
<core:PrimaryReference>
<core:RefNum>8430469105824</core:RefNum>
</core:PrimaryReference>
</core:ReferenceCoded>
</sample></pre>
<p>Based on my assumed sample data, have you tried in the Web Service Data Set:</p>
<p> </p>
<p>1. Define a Row Mapping as:</p>
<pre class="_prettyXprint">
/sample/core:ReferenceCoded</pre>
<p>2. Define two Column Mappings with the following XPath expressions:</p>
<pre class="_prettyXprint">
/core:ReferenceTypeCodedOther
/core:PrimaryReference/core:RefNum
</pre>
<p>3. Add a Filter</p>
<p> </p>
<p>ReferenceTypeCodedOther = "EanProductNumber"</p>
<p> </p>
<p> </p>
<p> </p>
<p>An alternative solution is to use a scripted data source / data set, as described in this DevShare (<a data-ipb='nomediaparse' href='
http://developer.actuate.com/community/forum/index.php?/files/file/1122-parsing-xml-in-birt-with-e4x/'>http://developer.actuate.com/community/forum/index.php?/files/file/1122-parsing-xml-in-birt-with-e4x/</a>)
. </p>
<p> </p>
<p>You will find with BIRT there are many ways to solve your problem.</p>
dcbsant
<p>Hi,</p>
<p> </p>
<p>Thank you for your answer...</p>
<p> </p>
<p>Really, the XML is more complex.</p>
<p> </p>
<div><ListOfASNPackageDetail></div>
<div> <ASNPackageDetail></div>
<div> <core:PackageType></div>
<div> <core:PackageTypeCoded>Truck</core:PackageTypeCoded></div>
<div> </core:PackageType></div>
<div> <core:NumberOfPackages>2</core:NumberOfPackages></div>
<div> </div>
<div> <core:ListOfPackage></div>
<div> <core:Package></div>
<div> <core:PackageID>2</core:PackageID></div>
<div> <core:ListOfPackageMark></div>
<div> <core:PackageMark></div>
<div> <core:PackageMarkCoded>SSCC-18</core:PackageMarkCoded></div>
<div> <core:PackageMarkValue>134821000000000106</core:PackageMarkValue></div>
<div> </core:PackageMark></div>
<div> </core:ListOfPackageMark></div>
<div> <core:ListOfDimension/></div>
<div> <core:PackageDetail></div>
<div> <core:PackageType></div>
<div> <core:PackageTypeCoded>Other</core:PackageTypeCoded></div>
<div> <core:PackageTypeCodedOther>X1</core:PackageTypeCodedOther></div>
<div> </core:PackageType></div>
<div> <core:NumberOfPackages>2</core:NumberOfPackages></div>
<div> <core:ListOfPackage></div>
<div> <core:Package></div>
<div> <core:PackageID>3</core:PackageID></div>
<div> <core:ListOfItemReference></div>
<div> <core:PackageItemReference></div>
<div> <core:ListOfReferenceCoded></div>
<div> <core:ReferenceCoded></div>
<div> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded></div>
<div> <core:ReferenceTypeCodedOther>BuyerProductNumber</core:ReferenceTypeCodedOther></div>
<div> <core:PrimaryReference></div>
<div> <core:RefNum>PR010001</core:RefNum></div>
<div> </core:PrimaryReference></div>
<div> </core:ReferenceCoded></div>
<div> <core:ReferenceCoded></div>
<div> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded></div>
<div> <core:ReferenceTypeCodedOther>EanProductNumber</core:ReferenceTypeCodedOther></div>
<div> <core:PrimaryReference></div>
<div> <core:RefNum>8430469105824</core:RefNum></div>
<div> </core:PrimaryReference></div>
<div> </core:ReferenceCoded></div>
<div> <core:ReferenceCoded></div>
<div> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded></div>
<div> <core:ReferenceTypeCodedOther>ItemDescription</core:ReferenceTypeCodedOther></div>
<div> <core:PrimaryReference></div>
<div> <core:RefNum>LOT1</core:RefNum></div>
<div> </core:PrimaryReference></div>
<div> </core:ReferenceCoded></div>
<div> <core:ReferenceCoded></div>
<div> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded></div>
<div> <core:ReferenceTypeCodedOther>freetext01</core:ReferenceTypeCodedOther></div>
<div> <core:PrimaryReference></div>
<div> <core:RefNum>S</core:RefNum></div>
<div> </core:PrimaryReference></div>
<div> </core:ReferenceCoded></div>
<div> <core:ReferenceCoded></div>
<div> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded></div>
<div> <core:ReferenceTypeCodedOther>freetext02</core:ReferenceTypeCodedOther></div>
<div> <core:PrimaryReference></div>
<div> <core:RefNum>S</core:RefNum></div>
<div> </core:PrimaryReference></div>
<div> </core:ReferenceCoded></div>
<div> <core:ReferenceCoded></div>
<div> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded></div>
<div> <core:ReferenceTypeCodedOther>freetext03</core:ReferenceTypeCodedOther></div>
<div> <core:PrimaryReference></div>
<div> <core:RefNum>5400</core:RefNum></div>
<div> </core:PrimaryReference></div>
<div> </core:ReferenceCoded></div>
<div> <core:ReferenceCoded></div>
<div> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded></div>
<div> <core:ReferenceTypeCodedOther>freetext03</core:ReferenceTypeCodedOther></div>
<div> <core:PrimaryReference></div>
<div> <core:RefNum>5400</core:RefNum></div>
<div> </core:PrimaryReference></div>
<div> </core:ReferenceCoded></div>
<div> </core:ListOfReferenceCoded></div>
<div> </core:PackageItemReference></div>
<div> <core:PackageItemReference></div>
<div> <core:LineItemReference>0</core:LineItemReference></div>
<div> <core:Quantity></div>
<div> <core:QuantityValue>2800</core:QuantityValue></div>
<div> <core:UnitOfMeasurement/></div>
<div> </core:Quantity></div>
<div> </core:PackageItemReference></div>
<div> </core:ListOfItemReference></div>
<div> <core:ListOfPackageMark></div>
<div> <core:PackageMark></div>
<div> <core:PackageMarkCoded>SSCC-18</core:PackageMarkCoded></div>
<div> <core:PackageMarkValue>534821000000000104</core:PackageMarkValue></div>
<div> </core:PackageMark></div>
<div> </core:ListOfPackageMark></div>
<div> <core:ListOfDimension/></div>
<div> <core:PackageDetail></div>
<div> <core:PackageType></div>
<div> <core:PackageTypeCoded>Other</core:PackageTypeCoded></div>
<div> <core:PackageTypeCodedOther>PK</core:PackageTypeCodedOther></div>
<div> </core:PackageType></div>
<div> <core:NumberOfPackages>1</core:NumberOfPackages></div>
<div> </core:PackageDetail></div>
<div> </core:Package></div>
<div> </div>
<div>I need to recover information of the groups <core:ReferenceCoded> using <core:PackageTypeCodedOther> as separator and I need the information before these groups to....</div>
<div> </div>
<div>I have a Data set where I recover all information before and other with your answer but I cant join them.</div>
Clement Wong
<p>Based on what you have sent, you can still use the method I outlined even for the larger XML.</p>
<p> </p>
<p>However, I would like to understand the high level objective of what you would like to achieve. Do you have an example of the output you would like to have the end user see? I didn't get the part where you said "I need the information before these groups to...." and the part about joining the data sets. The sample output based on the information you provided would definitely be helpful.</p>
dcbsant
<p>Hi,</p>
<p> </p>
<p>In the fileI have freetext fields on line Level.</p>
<p> </p>
<p><span style="font-size:8pt;"><core:ReferenceCoded> </span></p>
<p><span style="font-size:8pt;"> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded> </span></p>
<p><span style="font-size:8pt;"> <core:ReferenceTypeCodedOther>freetext01</core:ReferenceTypeCodedOther></span></p>
<p><span style="font-size:8pt;"> <core:PrimaryReference> </span></p>
<p><span style="font-size:8pt;"> <core:RefNum></span><strong><span style="color:#FF0000;"> YYYYYYY</span></strong><span style="font-size:8pt;"> </core:RefNum> </span></p>
<p> <span style="font-size:8pt;"></core:PrimaryReference> </span></p>
<p><span style="font-size:8pt;"></core:ReferenceCoded> </span></p>
<p><span style="font-size:8pt;"><core:ReferenceCoded> </span></p>
<p><span style="font-size:8pt;"> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded> </span></p>
<p><span style="font-size:8pt;"> <core:ReferenceTypeCodedOther>freetext02</core:ReferenceTypeCodedOther></span></p>
<p><span style="font-size:8pt;"> <core:PrimaryReference> </span></p>
<p><span style="font-size:8pt;"> <core:RefNum></span><strong><span style="color:#FF0000;">XXXXXX</span></strong><span style="font-size:8pt;"></core:RefNum> </span></p>
<p> <span style="font-size:8pt;"></core:PrimaryReference> </span></p>
<p><span style="font-size:8pt;"></core:ReferenceCoded> </span></p>
<p><span style="font-size:8pt;"><core:ReferenceCoded> </span></p>
<p><span style="font-size:8pt;"> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded> </span></p>
<p><span style="font-size:8pt;"> <core:ReferenceTypeCodedOther>freetext03</core:ReferenceTypeCodedOther></span></p>
<p><span style="font-size:8pt;"> <core:PrimaryReference> </span></p>
<p><span style="font-size:8pt;"> <core:RefNum></span><strong><span style="color:#FF0000;"><span style="font-size:12pt;">5400</span></span></strong><span style="font-size:8pt;"></core:RefNum> </span></p>
<p><span style="font-size:8pt;"> </core:PrimaryReference> </span></p>
<p><span style="font-size:8pt;"></core:ReferenceCoded> </span></p>
<p><span style="font-size:8pt;"><core:ReferenceCoded> </span></p>
<p><span style="font-size:8pt;"> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded> </span></p>
<p><span style="font-size:8pt;"> <core:ReferenceTypeCodedOther>freetext04</core:ReferenceTypeCodedOther></span></p>
<p><span style="font-size:8pt;"> <core:PrimaryReference> </span></p>
<p><span style="font-size:8pt;"> <core:RefNum></span><strong><span style="color:#FF0000;">23223432</span></strong><span style="font-size:8pt;"></core:RefNum> </span></p>
<p><span style="font-size:8pt;"> </core:PrimaryReference> </span></p>
<p><span style="font-size:8pt;"></core:ReferenceCoded> </span></p>
<p> </p>
<p>I’m calling this fields in datasets as:</p>
<p> </p>
<p><span style="font-family:symbol;"><span style="font-size:9pt;">· </span></span><span style="font-family:'segoe ui', sans-serif;"><span style="font-size:9pt;">/core:ListOfItemReference/core:PackageItemReference/core:ListOfReferenceCoded/core:ReferenceCoded</span></span><strong><span style="color:#FF0000;"><span style="font-family:'segoe ui', sans-serif;"><span style="font-size:12pt;">[4]</span></span></span></strong><span style="font-family:'segoe ui', sans-serif;"><span style="font-size:9pt;">/core:PrimaryReference/core:RefNum</span></span></p>
<p><span style="font-family:symbol;"><span style="font-size:9pt;">· /</span></span><span style="font-family:'segoe ui', sans-serif;"><span style="font-size:9pt;">core:ListOfItemReference/core:PackageItemReference/core:ListOfReferenceCoded/core:ReferenceCoded</span></span><strong><span style="color:#FF0000;"><span style="font-family:'segoe ui', sans-serif;"><span style="font-size:12pt;">[5]</span></span></span></strong><span style="font-family:'segoe ui', sans-serif;"><span style="font-size:9pt;">/core:PrimaryReference/core:RefNum</span></span></p>
<p><span style="font-family:symbol;"><span style="font-size:9pt;">· </span></span><span style="font-family:'segoe ui', sans-serif;"><span style="font-size:9pt;">/core:ListOfItemReference/core:PackageItemReference/core:ListOfReferenceCoded/core:ReferenceCoded</span></span><strong><span style="color:#FF0000;"><span style="font-family:'segoe ui', sans-serif;"><span style="font-size:12pt;">[6]</span></span></span></strong><span style="font-family:'segoe ui', sans-serif;"><span style="font-size:9pt;">/core:PrimaryReference/core:RefNum</span></span></p>
<p><span style="font-family:symbol;"><span style="font-size:9pt;">· </span></span><span style="font-family:'segoe ui', sans-serif;"><span style="font-size:9pt;">/core:ListOfItemReference/core:PackageItemReference/core:ListOfReferenceCoded/core:ReferenceCoded</span></span><strong><span style="color:#FF0000;"><span style="font-family:'segoe ui', sans-serif;"><span style="font-size:12pt;">[7]</span></span></span></strong><span style="font-family:'segoe ui', sans-serif;"><span style="font-size:9pt;">/core:PrimaryReference/core:RefNum</span></span></p>
<p> </p>
<p>My problem is that the order of this fields is not going to be always the same, So I need to call each field in the dataset with the reference of the field <ReferenceTypeCodedOther></p>
<p> </p>
<p><span style="font-size:8pt;"><core:ReferenceCoded> </span></p>
<p><span style="font-size:8pt;"> <core:ReferenceTypeCoded>Other</core:ReferenceTypeCoded> </span></p>
<p><span style="font-size:8pt;"> <core:ReferenceTypeCodedOther><strong><span style="color:#FF0000;">freetext01</span></strong></span></core:ReferenceTypeCodedOther></p>
<p><span style="font-size:8pt;"> <core:PrimaryReference> </span></p>
<p><span style="font-size:8pt;"> <core:RefNum>S</core:RefNum> </span></p>
<p><span style="font-size:8pt;"> </core:PrimaryReference</span></p>
<p><img src="
http://i68.tinypic.com/1zvu6up.jpg"
; alt="1zvu6up.jpg"></p>
Clement Wong
<p>It appears that you'll need to use a scripted data source / data set, and use E4X to parse out the data you need. Were you able to review the DevShare I referenced in post #2?</p>
<p> </p>
<p>And reviewing your XML in post #3, it's incomplete or invalid. Are you able to attach the complete XML as a file?</p>
<p> </p>
<p>Also, posting the screenshot is a first step, but the fields are cut off. I don't know what the detail line values under REFERENCIA, EAN PRODUCTO, LOTE, etc... would display. As I mentioned before, can you please mock-up the report output based on the sample data?</p>
dcbsant
<p>Hi,</p>
<p> </p>
<p>Thank you again for your help. Attached the XML and the RPTDesign.</p>
<p> </p>
<p><a data-ipb='nomediaparse' href='
https://www.dropbox.com/sh/tgpl7n2slbbe6e8/AACzWPZNsoV7nCYIzz5U6rcea?dl=0'>https://www.dropbox.com/sh/tgpl7n2slbbe6e8/AACzWPZNsoV7nCYIzz5U6rcea?dl=0</a></p>
;
<p> </p>
<p>Whay I'm trying is:</p>
<p> </p>
<p>- REFERENCIA: RefNum where core:ReferenceTypeCodedOther="BuyerProductNumber"</p>
<p>- EAN PRODUCTO: RefNum where core:ReferenceTypeCodedOther="EanProductNumber"</p>
<p>- LOTE: RefNum where core:ReferenceTypeCodedOther="freetext01"</p>
<p>.</p>
<p>.</p>
<p>.</p>
Clement Wong
<p>This XPath syntax worked for me in the Column Mapping for REFERENCIA aka RefNum(BuyerProductNumber) in your LINEAS data set:</p>
<p> </p>
<p><span style="font-family:'courier new', courier, monospace;">/core:ListOfItemReference/core:PackageItemReference/core:ListOfReferenceCoded/core:ReferenceCoded/core:ReferenceTypeCodedOther[. = "BuyerProductNumber"]/../core:PrimaryReference/core:RefNum</span></p>
dcbsant
<p>Hi,</p>
<p> </p>
<p>Sorry.... In my birt is not working. I always see the values of the column "ProductBuyerNumber",</p>
<p> </p>
<p>I have tried:</p>
<p> </p>
<p>/core:ListOfItemReference/core:PackageItemReference/core:ListOfReferenceCoded/core:ReferenceCoded/core:ReferenceTypeCodedOther[. = "EanProductNumber"]/../core:PrimaryReference/core:RefNum</p>
<p> </p>
<p>/core:ListOfItemReference/core:PackageItemReference/core:ListOfReferenceCoded/core:ReferenceCoded/core:ReferenceTypeCodedOther[. = "ItemDescription"]/../core:PrimaryReference/core:RefNum</p>
<p> </p>
<p>/core:ListOfItemReference/core:PackageItemReference/core:ListOfReferenceCoded/core:ReferenceCoded/core:ReferenceTypeCodedOther[. = "fretext01"]/../core:PrimaryReference/core:RefNum</p>
<p>.</p>
<p>.</p>
<p>And I always have in the column [RefNum(EanProductNumber)] the values of the column: [RefNum(BuyerProductNumber)]</p>
<p> </p>
<p> </p>
<p><img src="
http://i63.tinypic.com/2mchjls.jpg"
; alt="2mchjls.jpg"></p>
Clement Wong
<p>You're right. I tried with the other columns, and do not see the expected results. You'll need to file a bug against this (<a data-ipb='nomediaparse' href='
http://www.eclipse.org/birt/community/#bugzilla'>http://www.eclipse.org/birt/community/#bugzilla</a>)
. </p>
<p> </p>
<p>A workaround would be to use a scripted data source / data set to read in the XML and use javax.xml.xpath to find the elements you need.</p>
dcbsant
<p>Hi,</p>
<p> </p>
<p>I have found other solution...</p>
<p> </p>
<p>I have createdon dataset with all info DATA1</p>
<p> </p>
<p>Then I have created other with all REFNUM1 and a filter of "fretext01"</p>
<p>I have created a join data set (DATA2) between DATA1 and REFNUM1 </p>
<p> </p>
<p>Then I have created other with all REFNUM2 and a filter of "fretext02"</p>
<p>I have created a join data set (DATA3) between DATA2 and REFNUM2 </p>
<p> </p>
<p>Then I have created other with all REFNUM3 and a filter of "fretext03"</p>
<p>I have created a join data set (DATA4) between DATA3 and REFNUM3 </p>
<p> </p>
<p>And now I use DATA4 to crate the PDF.</p>