*從您的報告中提取特定信息可能具有挑戰性。 對於我們很多人來說,我們學會了導航我們的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 腳本,第二版.

*注:剪貼畫來源:空白路標剪貼畫