Проверьте, если Атрибут = Значение узла без использования переменных - PullRequest
1 голос
/ 13 февраля 2012

У меня есть этот XML-файл

<all>
 <general>
  <catagory_name>
   <catg>Action</catg_1>
   <catg>Other</catg_2>
  </catagory_name>
 </general>
 <games>
  <catagory name='Action'>
   <game>
    <name>1945<!--name--></name>
    <url><!--URL to game download--></url>
    <image><!--image location--></image>
    <alt>1945 Icon<!--alt text for image--></alt>
   </game>
  </catagory>
  <catagory name='Other'>
   <game>
    <name>Platform Game<!--name--></name>
    <url><!--URL to game download--></url>
    <image><!--image location--></image>
    <alt>Platform Game Icon<!--alt text for image--></alt>
   </game>
  </catagory>
 </games>
</all>

На данный момент моя выписка из моего xslt гласит:

<xsl:for-each select="all/general/catagory_name">
<xsl:variable name="catg"><xsl:value-of select="catg"/></xsl:variable>
<xsl:if test="//all/games/catagory[@name=$catg]/game[position() = (1<!--I use nth term here but this is not relevant to my question so just pretend value = 1-->)]/url">
<!--action-->
</xsl:if>
</xsl:for-each>

Я хочу знать, как заменить [@ name = $ catg] значением // all / general / catagory_name / catg_1, но не могу понять, как это сделать.

1 Ответ

2 голосов
/ 13 февраля 2012

Я хочу знать, как заменить [@name=$catg] значением //all/general/catagory_name/catg_1, но не могу понять, как это сделать.

Использовать :

/all/games/catagory[@name = current()/catg1]

При этом выбираются все элементы /all/games/catagory, строковое значение атрибута которых name равно строковому значению одного (в данном конкретном случае ровно одного) catg1 дочерних элементов текущего совпадения (илив настоящее время выполняется элементом xsl:for-each).

Подробнее о функции XSLT current() в спецификации W3C XSLT 1.0 .

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