公開日: 04/01/2021

ParseXML

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の文字列テキストを抽出します。

XMLの解析の例

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 // その他の行はデータとして読み込む
			);
		)
	)
 
);
より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).