Короткий ответ отрицательный .
В многомерном массиве нет ничего "процедурного".Проще говоря, XPath является языком запросов (навигационным) для древовидных структур (XML-документов), и древовидные структуры почти не имеют ничего общего с многомерными массивами.
Древовидные структуры являются просто двумерными .
При этом можно строить аналогии (модели) для многомерных объектов:
<t>
<a>
<b>
<c>11</c>
<c>12</c>
<c>13</c>
<c>14</c>
</b>
<b>
<c>15</c>
<c>16</c>
<c>17</c>
<c>18</c>
</b>
<b>
<c>19</c>
<c>20</c>
<c>21</c>
<c>22</c>
</b>
<b>
<c>23</c>
<c>24</c>
<c>25</c>
<c>26</c>
</b>
</a>
<a>
<b>
<c>27</c>
<c>28</c>
<c>29</c>
<c>30</c>
</b>
<b>
<c>31</c>
<c>32</c>
<c>33</c>
<c>34</c>
</b>
<b>
<c>35</c>
<c>36</c>
<c>37</c>
<c>38</c>
</b>
<b>
<c>39</c>
<c>40</c>
<c>41</c>
<c>42</c>
</b>
</a>
<a>
<b>
<c>43</c>
<c>44</c>
<c>45</c>
<c>46</c>
</b>
<b>
<c>47</c>
<c>48</c>
<c>49</c>
<c>50</c>
</b>
<b>
<c>51</c>
<c>52</c>
<c>53</c>
<c>54</c>
</b>
<b>
<c>55</c>
<c>56</c>
<c>57</c>
<c>58</c>
</b>
</a>
<a>
<b>
<c>59</c>
<c>60</c>
<c>61</c>
<c>62</c>
</b>
<b>
<c>63</c>
<c>64</c>
<c>65</c>
<c>66</c>
</b>
<b>
<c>67</c>
<c>68</c>
<c>69</c>
<c>70</c>
</b>
<b>
<c>71</c>
<c>72</c>
<c>73</c>
<c>74</c>
</b>
</a>
</t>
Когда мы сравниваем XML-документ над этим выражением XPath :
/*/a[4]/*[4]/*[4]
выбранный узел :
<c>74</c>
Полный пример преобразования XSLT с использованием такого выражения XPath :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<xsl:value-of select="a[4]/*[4]/*[4]"/>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к вышеуказанному XML-документу, получается требуемый, правильный результат:
74
Обновление : ФП обнаружил в комментарии, что онДля реализации общего алгоритма синтаксического анализа в XSLT необходима возможность многомерного массива.
Я бы посоветовал попытаться реализовать более простой и эффективный алгоритм синтаксического анализа, такой как LALR (1).
Вот некоторые преимущества парсера LALR (1) :
- Парсер LALR может автоматически генерироваться из грамматики LALR.
- LALRграмматика может использоваться для определения многих компьютерных языков.
- Парсер LALR мал.
- Парсер LALR быстрый (если алгоритм синтаксического анализа использует формат таблицы матричного парсера).
- Синтаксический анализатор LALR имеет линейную скорость (т. Е. Скорость зависит от размера только входного текстового файла, а не от размера распознаваемого языка).
- Грамматика LALR предоставляет ценную документациюраспознаваемого языка.
- Восстановление уже может быть встроено в анализатор.
- Обобщенные сообщения об ошибках уже могут быть встроены в анализатор.
- Абстрактный синтаксисКонструкция дерева может быть уже встроена в синтаксический анализатор.
- Распознавание контекстно-зависимых языковых конструкций уже может быть встроено в синтаксический анализатор.
Общий LALR(1) парсер уже реализован в чистом XSLT 2.0 и является частью FXSL .