2008-12-02 6 views
3

С помощью 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> 

ответ

4

Просто изменить 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

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

Следующие должны вывести input элементы, которые содержат ваши значения для каждого 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

Почему пройти через все хлопоты больших элементов XSL, а не как то, что я перечислил – 2008-12-02 15:50:31

5

Попробуйте

<?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> 

0

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

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

как в петле foreach. Спасибо, ребята, это сработало!

2

Just use an AVT (Атрибут Значение шаблон) следующим образом:

<input type="hidden" name="case_num" value="{*/*/*/case_id}"/> 
Смежные вопросы