Published on InterSystems Developer Community (https://community.intersystems.com)

Home > %XML.Reader

Question
Patrik Spisak · Feb 14, 2020

%XML.Reader

Hi guys,

I need help because I have no idea how to proceed further and documentation does not explaining this solution.

I have XML like this:

<?xml version="1.0"?>

<ProductionPackage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" JobName="10006_8046_L69">

  <Barcode>1200002101</Barcode>

  <DueDate>31.12.5000 23:59:59</DueDate>

  <BasicMaterial>1.0038</BasicMaterial>

  <RawMaterial>St37-120</RawMaterial>

  <RawMaterialThicknessUnit>mm</RawMaterialThicknessUnit>

  <JobNote />

  <CreatedBy>stko</CreatedBy>

  <ChangedBy>stko</ChangedBy>

  <Workplace WorkplaceName="TruLaser 3030 (L49)">

    <Barcode>0800000029</Barcode>

    <CostCenter />

    <Activity>2D-Tafelbearbeitung</Activity>

    <MachineName>L49</MachineName>

    <MachineType>51</MachineType>

    <ControlName>Sin 840D</ControlName>

    <ControlType>1</ControlType>

    <ProcessingAreaX>3000.00</ProcessingAreaX>

    <ProcessingAreaY>1500.00</ProcessingAreaY>

    <ProcessingAreaZ>115.00</ProcessingAreaZ>

  </Workplace>

 

Im trying to read all nodes within %XML.Reader and Correlate. For parents it's not problem and I can get it. But I have no idea what to do if I want get Workplace with all his childs.

 Class dhr.production.article.xml.productionPackage Extends (%Persistent, %XML.Adaptor)
{ 
  Parameter XMLNAME = "ProductionPackage"; 
  Property Barcode As %Integer; Property DueDate As %String; 
  Property BasicMaterial As %Float; 
  Property RawMaterial As %String; 
  Property Workplace As dhr.production.article.xml.workplace; 
}
Class dhr.production.article.xml.workplace Extends (%Persistent, %XML.Adaptor)
{ 
 Parameter XMLNAME = "Workplace"; 
 Property Barcode As %Integer; 
 Property MachineName As %String; 
 Property MachineType As %String; 
 Property ControlName As %String; 
 Property ControlType As %Integer;
}

For writing values from parrent it working fine, but in documentation there is no mention how I can get output from childrens and siblings. I tried object.Workplace.Barcode but does not work at all.

 ClassMethod getFiles(pDir As %String, pFileSpec As %String)
{
    SET tRS = ##class(%ResultSet).%New("%Library.File:FileSet"),
        tSC = tRS.Execute(pDir,pFileSpec)     

    WHILE tRS.Next() 
    {
        SET filePath = tRS.Get("Name"),
            lastModified = tRS.Get("DateModified"),
            fileType = tRS.Get("Type")
                
        SET xmlReader = ##class(%XML.Reader).%New(),
            xmlStatus = xmlReader.OpenFile(filePath)
            
        DO xmlReader.Correlate("ProductionPackage", "dhr.production.article.xml.productionPackage")
        
        DO xmlReader.Next(.object, .xmlStatus)
        
        WRITE !,object.Barcode     
  }
                  
       
    QUIT
}
#XML #Caché

Source URL:https://community.intersystems.com/post/xmlreader