Xpath и параметры - PullRequest
       17

Xpath и параметры

1 голос
/ 19 марта 2010

Я относительно новичок в XSL, и я думаю, что это основной вопрос. Так что я лучше приношу свои извинения рано!

По сути, я хотел бы использовать функцию-значение. Это будет в шаблоне, и я хотел бы передать часть xpath в качестве параметра.

<xsl:variable name="TEST_VAR">"h:elementA/elementB"</xsl:variable>

... and then use the variable  (or passed in param) as all (or part) of the xpath:

<xsl:element name="transformedElement"><xsl:value-of select=$TEST_VAR/></xsl:element>

Мне бы очень хотелось, чтобы xpath представлял собой смесь строковых литералов и vlue of TEST_VAR.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 19 марта 2010

То, что вы хотите сделать, не может быть сделано. Вы не можете интерпретировать простые строки как выражения XPath в XSL-преобразовании.

Но ты не должен был бы, так или иначе. Судя по всему, вы можете заменить свой пример следующим, чтобы получить то, что вы хотите:

<xsl:variable name="TEST_VAR" select="h:elementA/elementB"/>
<xsl:element name="transformedElement">
  <xsl:value-of select="$TEST_VAR"/>
</xsl:element>

Но я подозреваю, что вы ошарашены своим примером до такой степени, что слишком просто увидеть, чего вы на самом деле хотите.


Вот краткий совет по использованию переполнения стека: сформулируйте свои вопросы о том, что вам действительно нужно делать, и о том, почему у вас возникают проблемы при этом. То, что вы сделали с этим вопросом, - это решение вашей проблемы, и вы спрашиваете переполнение стека, если это возможно. Это не так, и, поскольку я не вижу вашей первоначальной проблемы, я не могу помочь вам больше, чем у меня уже есть.

В следующий раз, когда вы зададите вопрос, обязательно задайте вопрос о проблеме, с которой вы столкнулись, а не о потенциальном решении проблемы, с которой вы столкнулись. Таким образом, вы получите лучшие ответы.

0 голосов
/ 19 марта 2010

Передайте желаемое выражение XPath как глобальное <xsl:param>. Если имя этого глобального параметра vQuery, вы можете использовать код, подобный этому :

<xsl:element name="transformedElement"> 
  <xsl:value-of select=
     "*[name() = substring-before($vQuery, '/')]
                 /*[name() = substring-after($vQuery, '/')]"/> 
</xsl:element>

Такая техника обычно требует, чтобы у вас было много знаний о выражении XPath , которое будет передано. В этом случае он опирается на тот факт, что это относительное выражение XPath с ровно двумя шагами местоположения и без предикатов в них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...