Атрибут текста в качестве значения для другого элемента - PullRequest
3 голосов
/ 02 декабря 2008

Учитывая приведенный ниже XML-код, я хотел бы узнать, как получить значение текста в узле case_id в качестве атрибута для скрытого тега ввода на листе xsl ниже. Возможно ли это?

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="data.xsl"?>
<NewDataSet>
<Cases>
<Case>
<case_id>30</case_id>
...
...
</Case>
</Cases>
</NewDataset>
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<input type="hidden" name="case_num" value="?"/>
</xsl:template>
</xsl:stylesheet>

Ответы [ 5 ]

5 голосов
/ 02 декабря 2008

Попробуйте это

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <input type="hidden" name="case_num">
      <xsl:attribute name="value">
        <xsl:value-of select="/NewDataSet/Cases/Case/case_id/text()"/>
      </xsl:attribute>
    </input>
  </xsl:template>
</xsl:stylesheet>

или вы можете встроить, как это

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <input type="hidden" name="case_num" value="{/NewDataSet/Cases/Case/case_id/text()}"/>
  </xsl:template>

4 голосов
/ 02 декабря 2008

Просто измените свой XSLT на это, это предполагает, что у вас есть только 1 case_id, в противном случае вам потребуется перейти к более конкретному совпадению шаблона и удалить часть пути в значении XPATH, которое я использовал в качестве примера.

<input type="hidden" name="case-num">
    <xsl:attribute name="value">
        <xsl:value-of select="/NewDataSet/Cases/Case/case_id" />
    </xsl:attribute>
</input>
2 голосов
/ 03 декабря 2008

Просто используйте AVT (шаблон значений атрибутов), например:

<input type="hidden" name="case_num" value="{*/*/*/case_id}"/>
2 голосов
/ 02 декабря 2008

Вам необходимо расширить XSLT, добавив несколько более конкретных совпадений.

Следующие элементы должны выводить input элементов, которые содержат значения case_id для каждого Case. Я предположил, что есть один case_id за Case. Я пытался сделать XSLT настолько явным, насколько смогу, но вам не нужно быть таким точным в своей реализации, если вы этого не хотите.

 <xsl:template match="/">
   <xsl:apply-templates />
 </xsl:template>

 <xsl:template match="Case">
    <xsl:element name="input">
       <xsl:attribute name="type">
          <xsl:text>hidden</xsl:text>
       </xsl:attribute>
       <xsl:attribute name="name">
          <xsl:text>case_num</xsl:text>
       </xsl:attribute>
       <xsl:attribute name="value">
          <xsl:value-of select="case_id"/>
       </xsl:attribute>
    </xsl:element>
 </xsl:template>
0 голосов
/ 02 декабря 2008

Я изменил его на:

<input type="hidden" name="case-num">
    <xsl:attribute name="value">
        <xsl:value-of select="case_id" />
    </xsl:attribute>
</input>

как в цикле foreach. Спасибо, ребята, что работал угощение!

...