*從報告中提取特定信息可能具有挑戰性。 對於我們很多人來說,我們學會了導航聯合管理計劃報告使用下標方法來訪問我們想要的值。 樹結構窗口是我們的朋友(現在仍然是),它向我們展示了構成報告的所有顯示框。
您可能已經開始使用顯示框名稱旁邊括號中顯示的數字來確保您擁有正確的數字。 然後,您的同事(具有不同的偏好或不同版本的 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 表示形式。
X路徑
Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!Wait, there’s another way to traverse JMP reports!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 是所有其他元素出現的根元素。 表元素有一個屬性稱為當前的,其值為 0 或 1。 每個表元素內都有三個附加元素:姓名,列數, 和行數。 數據出現在標籤之間。
Big Class
5
40
Fitness
9
31
現在我們了解了 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 行長的字符串。 不要不知所措! 滾動到日誌頂部並僅查看第一個標籤:
該標籤被命名為大綱框它有四個屬性:寬度,高度,幫助鍵, 和開了。 接下來的一切都是元素的內容,即大綱框和其他元素的標題。 當您查看其他元素時,請注意元素名稱與樹結構中的顯示框名稱相同,但採用 XML 格式。
圖 7.5 XML 元素與樹結構的比較
<大綱框屬性>標題 <列錶框屬性> <投遞箱屬性> <間隔盒屬性> 投遞箱> <大綱框屬性>標題 ETC… |
 |
現在我們知道了要搜索的元素的標籤名稱,讓我們探索如何使用 XPath 來找出有多少個大綱框。

在 JMP 中, XPath()消息被發送到平台對像或報告對象。 它的參數是一個 XPath 表達式,用於從報告的 XML 表示形式中檢索信息。 你不必使用獲取XML在您可以使用之前XPath()信息。 但您可能會發現查看結構和可用屬性很有幫助。
下面將在報告中搜索任何大綱框並返回每個大綱框的引用列表。
obList = Report( dist ) << XPath( "//OutlineBox" );
Show( obList );
/*: obList = {DisplayBox[大綱框], DisplayBox[大綱框], DisplayBox[大綱框], 顯示框[大綱框]}; |
我們可以簡單地使用NItems()功能於對象列表獲取列表中存儲的大綱框引用的數量。 或者,當您了解有關 XPath 語言的更多信息時,您可以使用XPath 計數()函數返回計數而不是對每個大綱框的引用。
obCount = N Items( Report( dist ) << XPath( "//OutlineBox" ) );
//OR
obCount = Report( dist ) << XPath( "count(//OutlineBox)" );
現在讓我們看一個更有趣的例子。 假設我們只想顯示單向報告的平均值和標準差表中的平均值和標準差列。
圖 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 )
);
|
我們可以使用以下命令返回“平均值”和“標準偏差”表下僅包含“數字列框”引用的列表
下標和 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 表示形式摘錄:
數字
請注意,其中有一個元素數字列框元素稱為數字列框標題。 這
元素包含報告列標題。 XPath 使我們能夠捕獲該文本並執行
比較。 僅引用標題為 Mean 以外的任何內容的 Number Col Boxes
或標準差以列表形式返回。
colsToHide = Report( ow )["Means and Std Deviations"] << XPath(
"//NumberColBox[NumberColBoxHeader[not(text() = 'Mean')
and not(text() = 'Std Dev')]]"
);
這個 XPath 查詢查看數字列框標題出現在 a 中的元素數字列框元素。 Text 函數從文本中提取文本數字列框標題元素。 在此示例中,如果文本滿足條件,即文本不平均且不標準差,則引用將在列表中返回。
發送能見度()發送到該列表的消息會將設置應用於列表中的每個項目。
colsToHide << Visibility( "Collapse" );
圖 7.7 隱藏列後的單向

Rosemary Lucas 和我希望您發現這些示例有助於瀏覽您的 JMP 報告。 有關以編程方式瀏覽報告的更多信息,請查看跳轉到 JMP 腳本編寫,第二版。

*注:剪貼畫來源:空白路標剪貼畫
您所說的輪廓框是什麼類型?您可以使用OutlineBox()建立輪廓框,例如,您可以使用 << 設定選單腳本設定紅色小三角選項。
Names Default To Here(1);
New Window("Example",
fontobj = ob = Outline Box("Outline Box",
V List Box(
ob2 = Outline Box("Outline Box 2",
H List Box(
Text Edit Box("Top Left"),
Text Edit Box("Top Right")
)
),
ob3 = Outline Box("Outline Box 3",
H List Box(
Text Edit Box("Bottom Left"),
Text Edit Box("Bottom Right")
)
)
)
)
);
ob << Set Menu Script(
{"Beep", Beep(), "Beep Twice", Beep() ; Wait(1.0) ; Beep() ; ,
"", 0, "Get Menu Script", Print(ob << Get Menu Script)}
);
如果您只想複製那個確切的顯示框,您可以使用克隆框,然後刪除所有子框。這樣做可能會導致很多問題
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dist = dt << Distribution(Nominal Distribution(Column(:sex)), Histograms Only);
obs = dist << XPath("//OutlineBox[@helpKey = 'Distrib']");
ob = obs[1];
obc = ob << Clone Box;
While(!IsEmpty(curchild = obc << child),
curchild << delete box;
);
obc << get xml;