C # .xsl вид из xml - выводит только первый элемент - PullRequest
0 голосов
/ 17 января 2011

Я учусь на лету, и я прокомментировал код C # с ///, который генерирует xml после:

csc Class1.cs /out:Class1Docs /rescurse:*.cs /doc:Class1Doc.xml

Мой xsl-файл (соответствующая часть) выглядит так:

<xsl:for-each select="doc">
            <br>
              <xsl:value-of select="members/member"/>
            </br>
            <br>
              <xsl:value-of select="summary"/>
            </br>
          </xsl:for-each>
      </body>
    </html>
</xsl:template>

Проблема в том, что мне нужно вывести член, сводку, параметры и возвращаемое значение. Я получаю только 'member / member': Класс1 Класс

Как выбрать значение xsl: для каждого тега?

Ответы [ 2 ]

0 голосов
/ 17 января 2011

Я не могу опубликовать весь пример XML, потому что это внутренняя информация

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

Как и другие респонденты, я предполагаю, но я предполагаю, что вы не смогли понять, что в XSLT 1.0 xsl: value-of инструкции выводит только строковое значение первого узла в последовательности.Если по какой-то причине вы не можете перейти на XSLT 2.0, вам нужно поместить xsl: value-of в цикл xsl: for-each или xsl: apply-templates.

0 голосов
/ 17 января 2011

Мой xsl-файл (соответствующая часть) вот так:

<xsl:for-each select="doc">
 <br>               
  <xsl:value-of select="members/member"/
 </br>             
 <br>               
  <xsl:value-of select="summary"/>             
 </br>           
</xsl:for-each>       
</body>     
</html> 
</xsl:template>

Это плохо сформированный XML !

Давайте подумаем, что соответствующая, правильно сформированная часть:

  <xsl:for-each select="doc">
    <br>
     <xsl:value-of select="members/member"/>
    </br>
    <br>
      <xsl:value-of select="summary"/>
    </br>
  </xsl:for-each>

Есть много проблем с этим кодом :

  1. AFAIK (x) HTML-элемент br не должен содержать . Может быть, вы хотели:



  2. <xsl:value-of select="members/member"/>

Инструкция <xsl:value-of> создает текстовый узел, содержащий строковое значение только для первого узла , указанное в выражении XPath в атрибуте select.

Возможно, вы хотели:

<xsl:copy-of select="members/member/text()"/>

0,3. Указание всех буквальных элементов результата и использование <xsl:for-each> в одном шаблоне не является хорошей практикой программирования XSLT . Рекомендуется использовать больше шаблонов и соответственно <xsl:apply-templates> вместо <xsl:for-each>.

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