2012-01-24 5 views
0

Я пытаюсь скрывать XML в HTML с помощью XSLT. В этой области мне нужно прочитать значения повторяющихся узлов.Чтение Повторяющееся значение узла в XSLT

Рассмотрим этот сценарий

<root> 
    <test> 
    <ID> 123 <</ID> 
    <Name> MyName </Name> 
    <Country> India </Country> 
    <Books> 
    <language> C </language> 
    <language> C++ </language> 
    <language> Java </language> 
    <language> XML </language> 
    </Books> 
</root> 

В этом примере я в состоянии прочитать все значения узлов, как

<xsl:value-of select="ID"> 

кроме узла "языка". Мне нужен вывод, как C C++ Java XML. Любая идея ????

+0

вам нужен xsl foreach, или шаблон xsl для этого. Для каждого из них, вероятно, будет выполнена эта работа на основе данных, которые вы опубликовали. –

+0

Опубликуйте свой xslt-код. Исправит это для вас :) –

ответ

0
<xsl:for-each select="Books/language"> 
<xsl:value-of select "." /> 
<xsl:text> </xsl:text> 
</xsl:for-each> 
2

Использование:

выражение
string(/*/*/Books) 

Это XPath вычисляется в string value из первого (в вашем случае есть только один) Books элемент, который является дочерним любого элемента, который дочерний элемент верхнего элемента XML-документа.

По определению string value элемента является конкатенацией (в порядке документа) всех его потомков текстовых узлов.

Полный код:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <xsl:value-of select="string(/*/*/Books)"/> 
</xsl:template> 
</xsl:stylesheet> 

когда это преобразование применяется на условии (но корректируется, чтобы быть хорошо сформирован !!!) документ XML-:

<root> 
    <test> 
     <ID> 123 </ID> 
     <Name> MyName </Name> 
     <Country> India </Country> 
     <Books> 
      <language> C </language> 
      <language> C++ </language> 
      <language> Java </language> 
      <language> XML </language> 
     </Books> 
    </test> 
</root> 

выражение XPath оценивается и получается результат:

C C++ Java XML 
+0

это будет прекрасно! Upvote :) –

+0

Эй, детское программист, ты вернулся - и ты рад. :) –

+0

большое спасибо :) –

0

Вот несколько советов, но на самом деле, я настоятельно рекомендую вам потратить пару часов работы через приличный учебник, такие как http://www.w3schools.com/xsl/

Во-первых, так как Dimitrie указал ваш XML не очень хорошо сформирован. Я немного удивлен, что ваш анализатор XSLT не расстроился из-за этого. У вас есть тестовый тег открытия, который никогда не закрывается, и дополнительный < в вашем закрывающемся теге идентификатора. Кроме того, ваше значение выражения не закрыто правильно

Во-вторых, вы говорите: «В этом примере я могу читать все значения узлов, например ...» Этот вид не имеет смысла, не видя остальных ваш код, и я предполагаю, что это выглядит примерно так:

<?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: матч бит шаблона означает, что если вы собираетесь быть в состоянии написать XSLT. XSLT работает через ваш документ по частям, применяя правила, которые вы даете ему, чтобы превратить входной документ в выходной документ.

На каждом этапе вам нужно знать, где он находится в документе. Это называется «контекстом». В приведенном выше коде правило применяется, когда оно получает/root. Это означает, что вещь в угловых скобках называется корнем, который не имеет вложенных предметов в угловые скобки.

Учитывая этот контекст, выражения XSLT относятся к нему. Это немного похоже на пути к каталогам DOS. Если вы не знаете текущий каталог, то относительные пути к файлу не означают многого.

Итак, в вашем примере select = "ID" означает значение тега ID, являющегося дочерним по отношению к текущему контексту i.e./root/ID.

Ваш вопрос был как о элементе языка. Ну, если контекст двигателя/root, вам нужно спуститься к книгам, а затем снова перейти на язык, чтобы выражение было ID/books/language

Хорошо, что вы пытаетесь научиться XSLT. На самом деле это не так сложно, и это чрезвычайно мощный язык для обработки XML.

Смежные вопросы