源XPath
源XPath在“选择列”对话框中指定。它决定了文档中的哪些节点可用作X轴和Y轴数据。“列搜索深度”组合框决定了将要搜索多少个级别以返回可用于X轴和Y轴数据的节点。
选择新的源XPath后,您必须单击更新列以使更改生效并在对话框中更新X轴和Y轴数据选择。如果XPath表达式中包含谓词,(例如,/Data/Region[1]使用[1]谓词来选择第一个Region元素),则必须选中“包含索引”复选框。如果您修改源XPath表达式,请始终记住单击更新列。
来自光标位置的源XPath
为了阐述在“选择列”对话框打开时会选择哪个源XPath,我们将使用下方显示的XML文档。它名为YearlySales.xml且位于C:\Documents and Settings\<username>\My Documents\Altova\XMLSpy2024\Examples\Tutorial文件夹中。
<?xml version="1.0" encoding="UTF-8"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="YearlySales.xsd">
<Region id="Americas">
<Year id="2005">30000</Year>
<Year id="2006">90000</Year>
<Year id="2007">120000</Year>
<Year id="2008">180000</Year>
<Year id="2009">140000</Year>
<Year id="2010">100000</Year>
</Region>
<Region id="Europe">
<Year id="2005">50000</Year>
<Year id="2006">60000</Year>
<Year id="2007">80000</Year>
<Year id="2008">100000</Year>
<Year id="2009">95000</Year>
<Year id="2010">80000</Year>
</Region>
<Region id="Asia">
<Year id="2005">10000</Year>
<Year id="2006">25000</Year>
<Year id="2007">70000</Year>
<Year id="2008">110000</Year>
<Year id="2009">125000</Year>
<Year id="2010">150000</Year>
</Region>
</Data>
以下情况有可能出现:
•如果光标位于Data元素的开始标记(包含在特性值中)或结束标记内的任何位置,或位于Data元素内的任何位置但不在后代节点内,则源XPath将为:/Data
•如果光标位于任何一个Region元素的开始标记(包含在特性值中)或结束标记内的任何位置,或Region元素内的任何位置但不在后代节点内,则源XPath将为:/Data/Region
•如果光标位于Year元素的开始标记(包含在特性值中)或结束标记内的任何位置,或Year元素内的任何位置,则源XPath将为:/Data/Region[N]/Year。谓词过滤器[N]将选择所选Year元素所在的特定Region元素。因此,X轴和Y轴数据选择将限制为该特定Region元素的Year元素。
•如果您只想选择一个Region元素,例如:/Data/Region[1],则将该元素突出显示,即第一个Region元素,如下方截图所示。
• 同样,如果您选择两个Region元素,则会生成一个仅选择这两个Region元素的XPath表达式。
您可以随后在“选择列”对话框中编辑源XPath表达式。
在网格视图中,选择是通过单击一个节点或标记一个范围来完成的。从网格视图选定内容中生成的源XPath与上述文本视图相同。
在XPath中包含索引
包含索引复选框决定了是否在XPath表达式中使用谓词过滤器,这些谓词过滤器是在调用“选择列”对话框时自动输入还是手动输入。例如,如果光标位于文档的第一个Region元素的后代元素内,并选中了包含索引复选框,则自动输入的XPath表达式将为:/Data/Region[1]/Year。如果未选中包含索引复选框,则表达式将为:/Data/Region/Year。
包含索引复选框还决定了是否保留手动输入的谓词。因此,如果您希望在源XPath表达式中使用谓词,则必须选中包含索引复选框。
源XPath选择的含义
请注意源XPath选择的以下含义。
•源XPath返回的序列中的项数决定了X轴上的刻度数。除了修改源XPath之外,只能通过另一种方法来更改X轴上的刻度数:为任何系列选择一个标签数量,该数量大于刻度数。有关这种情况的更多信息,请参见X轴选择。
•源XPath节点是所有可用作X轴和Y轴数据选择的节点,以及所有您可以输入的XPath表达式的祖先节点。
•作为上述两点的结果,对源XPath表达式的任何更改不但会影响X轴上的刻度数,还会影响与图表相关的任何XPath表达式的上下文。
以上方所示的XML文档为例,下方对一些XPath表达式进行了解释:
•/Data/Region:返回三个Region元素,因此X轴上有三个刻度。每个Region元素将依次成为XPath表达式的上下文节点。
•/Data/Region/Year:返回18个Year元素,因此X轴上有18个刻度。每个Year元素将依次成为XPath表达式的上下文节点。
•/Data/Region[1]/Year:返回第一个Region元素的六个Year子元素,因此X轴上有六个刻度。第一个Region元素的每个Year元素将依次成为XPath表达式的上下文节点。
•distinct-values(//Year/@id):返回六项(Year/@id特性的单个值:2005、2006、2007、2008、2009、2010)。然而,由于此XPath表达式不返回任何节点项,因此它不能用作XPath表达式的上下文节点。如果此序列中的项用于XML文档中的目标节点(例如,使用current()函数(简写:.)),则为了建立上下文,使用当前项的XPath表达式必须从文档根开始。例如:/Data/Region[1]/Year[@id eq .]。