Вот несколько указателей, но на самом деле, я настоятельно рекомендую вам потратить пару часов, работая над приличным учебным пособием, таким как http://www.w3schools.com/xsl/
Во-первых, как отметил Дмитрий, ваш XML не очень хорошо сформирован.Я немного удивлен, что ваш XSLT-парсер не расстроился по этому поводу.У вас есть открывающий тестовый тег, который никогда не закрывается, и дополнительный <в вашем закрывающем теге Id.Кроме того, ваше значение-выражение не закрыто должным образом </p>
Во-вторых, вы говорите: «В этом примере я могу прочитать все значения узла, как ...». Этот вид не имеет смысла, не видяостальная часть вашего кода, и я предполагаю, что это выглядит примерно так:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/root">
<xsl:value-of select="ID"/>
</xsl:template>
</xsl:stylesheet>
Очень важно понять, что означает бит соответствия xsl: template, если вы собираетесь писать XSLT.XSLT обрабатывает ваш документ по частям, применяя правила, которые вы ему даете, чтобы превратить входной документ в выходной документ.
На каждом этапе вам нужно знать, где он выглядит в документе.Это известно как «контекст».В приведенном выше коде правило применяется, когда оно попадает в / root.Это означает, что вещь в угловых скобках, называемая корнем, не имеет вложенной вещи в угловых скобках.
Учитывая этот контекст, выражения XSLT относятся к нему.Это немного похоже на пути к каталогам DOS.Если вы не знаете текущий каталог, относительные пути к файлам мало что значат.
Так что в вашем примере select = "ID" означает значение тега ID, являющегося дочерним для текущего контекста, т.е.root / ID.
Ваш вопрос был как к элементу языка.Что ж, если контекст движка - / root, то вам нужно перейти к книгам, а затем снова к языку, чтобы выражение было ID / books / language
Впрочем, если вы пытаетесь изучать XSLT, то это хорошо для вас.Это не так сложно, и это чрезвычайно мощный язык для обработки XML.