Как отобразить атрибуты в зависимости от значения атрибута с помощью XSLT? - PullRequest
0 голосов
/ 24 июня 2010


Мы используем XSLT для отображения атрибутов xml в зависимости от их значения. Мы можем сделать это со стороны сервера, используя C #. Но мы не понимаем, как этого добиться с помощью XSLT.
Мы используем образец XML как;

<BookInfo>
   <BookTable show="Book 1" >
       <book id="book1" value="Book 1" />
       <book id="book2" value="Book 2" />
   </BookTable>
</BookInfo>


Мы хотим прочитать значение атрибута «show» и в зависимости от значения мы хотим отобразить информацию об узле.
Пожалуйста, помогите мне добиться этого с помощью XSLT. Заранее спасибо.

Модифицированный xml;

<Book>
  <Info>
    <Item name="Item1" type="DropDown" defaultValue="Two" values="One,Two,Three" />
    <Item name="One" type="Label" value="some text"  />
    <Item name="Two" type="TextBox" value="another text"  />
    <Item key="Three" name="CheckBox"  value="true" />
  </Info>
</Book>

К сожалению, формат xml изменился. Теперь, в этом случае, для Item1 defaultValue равно двум, поэтому должен быть возвращен узел с именем «two».

1 Ответ

1 голос
/ 24 июня 2010

Это что-то вроде:

<xsl:template match="BookTable">
  <xsl:value-of select="book[@value = current()/@show]"/>
</xsl:template>

РЕДАКТИРОВАТЬ
Ваш второй пример не совсем понятен, я предполагаю, что всегда есть узел <Item name="Item1">, который указываетк реальному узлу, который должен отображаться.

<xsl:template match="Info">
  <xsl:copy-of select="Item[@name = Item[@name='Item1']/@defaultValue]" />
</xsl:template>

В XPath вам необходим @, чтобы получить значение атрибута вашего input-xml.
Item[@name = ...] выбираетэлемент, в котором значение атрибута name равно указанному значению.
current() предоставляет доступ к текущему узлу, который обрабатывает шаблон.Это необходимо, поскольку обычный @show выберет значение этого атрибута для выбранного узла.Пример: Item[@name = @defaultValue] выберет Предметы, где значения для 'name' и 'defaultValue' идентичны.

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