*从您的报告中提取特定信息可能具有挑战性。 对于我们很多人来说,我们学会了导航我们的JMP报告使用下标方法来访问我们想要的值。 树结构窗口是我们的朋友(现在仍然是),它向我们展示了构成报告的所有显示框。
您可能已经开始使用显示框名称旁边括号中显示的数字来确保您拥有正确的数字。 然后,您的同事具有不同的偏好或不同版本的 JMP,运行了您的脚本,但没有得到与您相同的结果。
Report( ow )[Number Col Box( 8 )][1];
这令人费解,但很快您就学会了一种使用相对引用的更强大的方法。 也就是说,您通过使用包含所需信息的 OutlineBox 的标题下标来浏览报告。
Report( ow )[Outline Box( "Summary of Fit" )][Number Col Box( 1 )][1];
等等,还有另一种遍历 JMP 报告的方法——我想你会喜欢的!
以下是摘自跳转到 JMP 脚本,第二版讨论如何将 XPath 查询语言应用于 JMP 报告的 XML 表示。
XPath
Wait, there’s another way to traverse JMP reports!等等,还有另一种遍历 JMP 报告的方法!我们中的许多人都熟悉 XML 文档。 对于那些不是,XML 代表可扩展标记语言。 它是一种标记语言,它为机器可读和理解的文档建立了一组规则。 XPath 是一种查询语言,使您能够浏览 XML 文档。
尽管 XML 看起来很像 HTML,但它们的用途却不同。 HTML 的目的是显示内容,而 XML 的目的更多是关于数据存储和传送内容。
让我们讨论 XML 文档的几个主要组件:
- 标签– 标签使 XML 看起来有点像 HTML。 标签通常以小于号 (<) 开头,以大于号 (>) 结尾。 标签名称在 < 和 > 符号之间指定,它不是预定义的值。 相反,文档的作者必须建立标签名称。 与 HTML 一样,标签必须用正斜杠关闭以表示结束标签(例如, content )。
- 元素– 如果您愿意,一个元素由一个完整的标签语句组成。 一个元素从开始标签的 < 开始,一直到包括结束标签的 >。 元素也可以包含其他元素。
- 属性– 属性是关于元素的元数据或附加详细信息。 一个属性在开始标签中指定,并且只能有一个值,用双引号指定。 一个标签可以有多个属性,但每种类型只有一个。
- 内容– 内容就是数据。 它是组成元素的开始标签和结束标签之间的文本、数字和其他字符。
请考虑以下示例 XML 文件。 这打开表element 是所有其他元素出现的根元素。 table 元素有一个属性叫做当前的,其值为 0 或 1。 每个表格元素内部都有三个附加元素:姓名, numCols , 和行数. 数据出现在标签之间。
<openTables>
<table current="1">
<name>Big Class</name>
<numCols>5</numCols>
<numRows>40</numRows>
</table>
<table current="0">
<name>Fitness</name>
<numCols>9</numCols>
<numRows>31<numRows>
</table>
</openTables>
现在我们了解了 XML 文档的结构,我们可以将这些知识应用到作为 XML 文档的 JMP 报告的结构中。 要查看 JMP 报告的 XML 表示,请发送获取 XML向报告层发送消息。 XML 将出现在日志中(查看 > 日志)。

让我们看一个例子。 假设您想以编程方式确定分布报告中出现了多少大纲框。
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dist = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :height ),
Horizontal Layout( 1 ),
Vertical( 0 )
)
);
您可以使用 JSL 逐步检查显示框并检查它们的类型,但这将是一项相当乏味的任务。 相反,让我们看一下 XML 表示。
Write( Report( dist ) << Get XML );
日志中显示的结果是一个将近 180 行长的字符串。 不要不知所措! 滚动到日志顶部并查看第一个标签:
标签被命名大纲框它有四个属性:宽度,高度,帮助键, 和开了. 接下来是元素的内容,也就是Outline Box和其他元素的标题。 查看其他元素时,请注意元素名称与树结构中的显示框名称相同,但采用 XML 格式。
图 7.5 XML 元素与树结构的比较
<大纲框属性>标题 <列表框属性> <投递箱属性> <间隔盒属性> 投递箱> <大纲框属性>标题 ETC… |
 |
现在我们知道要搜索的元素的标签名称,让我们探索如何使用 XPath 找出有多少个大纲框。

在 JMP 中, XPath()消息被发送到平台对象或报告对象。 它的参数是一个 XPath 表达式,用于从报告的 XML 表示中检索信息。 您不必使用获取 XML在您可以使用之前XPath()信息。 但是您可能会发现查看结构和可用属性很有帮助。
以下将在报告中搜索任何大纲框并返回对每个大纲框的引用列表。
obList = Report( dist ) << XPath( "//OutlineBox" );
Show( obList );
/*: obList = {DisplayBox[OutlineBox], DisplayBox[OutlineBox], DisplayBox[OutlineBox], 显示框[大纲框]}; |
我们可以简单地使用NItems()功能开启对象列表获取大纲框引用的数量存储在列表中。 或者,当您了解有关 XPath 语言的更多信息时,您可以使用XPath 计数()函数返回计数而不是对每个大纲框的引用。
obCount = N Items( Report( dist ) << XPath( "//OutlineBox" ) );
//OR
obCount = Report( dist ) << XPath( "count(//OutlineBox)" );
现在让我们看一个更有趣的例子。 假设我们只想在 Oneway 报表的均值和标准偏差表中显示均值和标准偏差列。
图 7.6 具有均值和标准偏差的单因素
 |
dt = Open( <BR /> "$SAMPLE_DATA\Big Class.jmp" <BR />);
ow = dt << Oneway(
Y( :height ),
X( :age ),
Means and Std Dev( 1 ),
Mean Error Bars( 1 ),
Std Dev Lines( 1 ),
Mean of Means( 1 )
);
|
我们可以使用返回 Means and Std Deviations 表下仅包含 Number Col Box 引用的列表
下标和 XPath 的组合:
/* Return a list of NumberColBox references */
ncbList = Report( ow )["Means and Std Deviations"] << XPath( "//NumberColBox" );
使用 JSL为了()循环,我们可以检查列的标题并将可见性属性更改为
如果标题不是平均值或标准差,则折叠。
/* Loop through each item to show only the Mean, Std Dev columns */
For( i = 1, i <= N Items( ncbList ), i++,
rptColName = ncbList[i] << Get Heading;
If( !Contains( {"Mean", "Std Dev"}, rptColName ),
ncbList[i] << Visibility( "Collapse" )
);
);
但同样,在 XPath 中有一种方法可以完成相同的结果,而无需为了()环形。 看
报告中 Number Col Box 的 XML 表示形式的摘录:
数字
注意里面有一个元素NumberColBox称为元素NumberColBoxHeader . 这个
元素包含报告列标题。 XPath 使我们能够捕获该文本并执行
比较。 仅引用具有除平均值以外的任何标题的数字列框
或 Std Dev 在列表中返回。
colsToHide = Report( ow )["Means and Std Deviations"] << XPath(
"//NumberColBox[NumberColBoxHeader[not(text() = 'Mean')
and not(text() = 'Std Dev')]]"
);
这个 XPath 查询查看NumberColBoxHeader出现在 a 中的元素NumberColBox元素。 Text 函数从NumberColBoxHeader元素。 在此示例中,如果文本符合条件,即文本不是均值且不是 Std Dev,则在列表中返回引用。
发送能见度()该列表的消息将设置应用于列表中的每个项目。
colsToHide << Visibility( "Collapse" );
图 7.7 隐藏列后的单向

Rosemary Lucas 和我希望您发现这些示例有助于浏览您的 JMP 报告。 有关以编程方式导航报告的更多信息,请查看跳转到 JMP 脚本,第二版.

*注:剪贴画来源:空白路标剪贴画