JSLには、XML解析用のコマンドがいくつか用意されています。
Parse XML( string, On Element( "tagname", Start Tag( expr ), End Tag( expr ) ) );
といった指定で、XMLタグにOn Element()式を使ったXML式を解析します。
value = XML Attr( "attribute name" );
は、Parse XML()式を評価する際にXML引数の文字列の値を抽出します。
value = XML Text();
は、Parse XML()式を評価する際にXMLタグのbodyの文字列テキストを抽出します。
Microsoft ExcelファイルにBig Class.jmpのデータが1行含まれているとします。このファイルを、XMLドキュメントとして保存したものの内容は以下のようになります。このファイルは、BigclassExcel.xmlという名前で、JMPのSamples/Import Dataフォルダにも保存されています。
<?xml version="1.0" encoding="UTF-8"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="Bigclass">
<Table ss:ExpandedColumnCount="5" ss:ExpandedRowCount="41" x:FullColumns="1"
x:FullRows="1">
<Row>
<Cell><Data ss:Type="String">name</Data></Cell>
<Cell><Data ss:Type="String">age</Data></Cell>
<Cell><Data ss:Type="String">sex</Data></Cell>
<Cell><Data ss:Type="String">height</Data></Cell>
<Cell><Data ss:Type="String">weight</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">KATIE</Data></Cell>
<Cell><Data ss:Type="Number">12</Data></Cell>
<Cell><Data ss:Type="String">F</Data></Cell>
<Cell><Data ss:Type="Number">59</Data></Cell>
<Cell><Data ss:Type="Number">95</Data></Cell>
</Row>
</Table>
</Worksheet>
</Workbook>
次のスクリプトは、BigclassExcel.xmlを読み込み、その情報からJMPデータテーブルを作成します。このスクリプトは、ParseXML.jslという名前で、JMPのSamples/Scriptsフォルダに保存されています。
file contents = Load Text File( "$SAMPLE_IMPORT_DATA/BigclassExcel.xml" );
Parse XML( file contents,
OnElement(
"urn:schemas-microsoft-com:office:spreadsheet^Worksheet",
StartTag(
sheetname = XML Attr(
"urn:schemas-microsoft-com:office:spreadsheet^Name",
"Untitled"
);
dt = New Table( sheetname );
row = 1;
col = 1;
)
),
OnElement(
"urn:schemas-microsoft-com:office:spreadsheet^Row",
StartTag(
If( row > 1, // 最初の行は列名
dt << Add Rows( 1 )
)
),
EndTag(
row++;
col = 1;
)
),
OnElement( "urn:schemas-microsoft-com:office:spreadsheet^Cell", EndTag( col++ ) ),
OnElement(
"urn:schemas-microsoft-com:office:spreadsheet^Data",
EndTag(
data = XML Text( collapse );
If( row == 1,
New Column( data, Character( 10 ) ), // 最初の行は列名
Column( col )[row - 1] = data // その他の行はデータとして読み込む
);
)
)
);