通过属性显示来自特定标签的项目

Posted

技术标签:

【中文标题】通过属性显示来自特定标签的项目【英文标题】:Displaying items from a specific tag via attributes 【发布时间】:2017-08-04 05:33:28 【问题描述】:

基本上我现在想做的是显示来自特定标签的项目。我打算区分具有独特属性的标签。我现在面临的问题是我似乎没有工作,因为它仍在显示来自另一个标签的项目。请帮忙。

这是 XML 内容

<group name="Personal Particulars">
  <field is_admin_field="N" required="Y">
    <question_title>Name</question_title>
    <type>TextField</type>
    <db_field_name>name</db_field_name>
    <db_field_length>250</db_field_length>
    <db_field_type>string</db_field_type>
    <additional_comment/>
  </field>
  <field is_admin_field="N" required="Y">
    <question_title>NRIC/FIN</question_title>
    <type>TextField</type>
    <db_field_name>nricfin</db_field_name>
    <db_field_length>20</db_field_length>
    <db_field_type>string</db_field_type>
    <additional_comment/>
  </field>
  <field is_admin_field="N" required="Y">
    <question_title>Contact No.</question_title>
    <type>TextField</type>
    <db_field_name>contact_no</db_field_name>
    <db_field_length>20</db_field_length>
    <db_field_type>string</db_field_type>
    <additional_comment/>
  </field>
</group>

<group name="Housing Type">
  <field is_admin_field="N" required="Y">
    <question_title>Which of the housing type best describes your residential?</question_title>
    <type>List</type>
    <db_field_name>which_of_the_housing_type_best_describes_your_residential</db_field_name>
    <options>
      <item score="0">3 - 5 room HDB</item>
      <item score="0">Executive Condominium </item>
      <item score="0">Landed 1 Floor</item>
      <item score="0">Landed 2 Floor</item>
      <item score="0">Landed 3 Floor</item>
      <item score="0">Landed 4 Floor</item>
      <item score="0">Landed 5 Floor</item>
    </options>
    <db_field_length>22</db_field_length>
    <additional_comment/>
  </field>
</group>

这是 XSLT

<div style="border:1px solid black">
    <div style="border:1px solid black">
      <xsl:variable name="name" select="/form/fieldset/group/@name"/>
      <xsl:if test="$name='Personal Particulars'">
        <xsl:text>Personal Particulars</xsl:text>
        <xsl:for-each select="form/fieldset/group/field">
    <div>
      <xsl:value-of select="question_title"/>
    </div>
    <xsl:variable name="type" select="type"/>
    <xsl:if test="$type='TextField'">
      <xsl:element name="input">
        <xsl:attribute name="type">textbox</xsl:attribute>
        <xsl:attribute name="maxlength">5</xsl:attribute>
      </xsl:element>
    </xsl:if>
    </xsl:for-each>
      </xsl:if>
  </div>
    <div style="border:1px solid black">
      <xsl:variable name="name" select="/form/fieldset/group/@name"/>
      <xsl:if test="$name='Housing Type'">
        <xsl:text>Housing Type</xsl:text>
        <xsl:for-each select="form/fieldset/group/field">
          <div>
            <xsl:value-of select="form/fieldset/group/question_title"/>
          </div>
          <xsl:variable name="type" select="type"/>
          <xsl:if test="$type='TextField'">
            <xsl:element name="input">
              <xsl:attribute name="type">textbox</xsl:attribute>
              <xsl:attribute name="maxlength">5</xsl:attribute>
            </xsl:element>
          </xsl:if>
        </xsl:for-each>
      </xsl:if>
    </div>
  </div>

【问题讨论】:

您可以更简洁地将 xsl:element 指令编写为&lt;input type='checkbox' need='need'/&gt; 还要注意您的“类别”路径错误,它应该是../category 【参考方案1】:

试试这个。您必须调整 for-each 循环中的 XPath 以匹配实际的 XML 结构-

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
   <xsl:output method="html" encoding="utf-8" indent="yes" />
   <xsl:template match="/">
      <xsl:for-each select="item">
         <div style="font-size:150%;margin-top:5%;">
            <xsl:value-of select="title"/>
         </div>
         <div style="font-size:150%;">
            <xsl:value-of select="description"/>
         </div>
         <xsl:variable name="category" select="category"/>
         <xsl:if test= "$category = 'Text' " >
            <xsl:for-each select="./options/need">
               <div>
                  <xsl:element name="input">
                     <xsl:attribute  name="type">checkbox</xsl:attribute>
                     <xsl:attribute name="value">
                        <xsl:value-of select="need"/>
                     </xsl:attribute>
                  </xsl:element>
                  <label>
                     <xsl:value-of select="."/>
                  </label>
               </div>
            </xsl:for-each>
         </xsl:if>
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

输出-

拥有像&lt;xsl:variable name="category" select="category"/&gt; 这样的变量将使您能够将条件&lt;xsl:if test= "$category = 'Text' " &gt; 放置在嵌套for-each 循环中的任何位置

根据后续评论,添加如何显示单选按钮-

<xsl:element name="input">
   <xsl:attribute  name="type">radio</xsl:attribute>
   <xsl:attribute  name="name">something</xsl:attribute>
   <xsl:attribute name="value">
      <xsl:value-of select="need"/>
   </xsl:attribute>
   <xsl:value-of select="."/>
</xsl:element>
<label>
   <xsl:value-of select="."/>
</label>

【讨论】:

嗨。谢谢您的回复。我可以说 继续从 的路径吗? 另外,当我将 checkbox 替换为 radio 时,我仍然可以检查多个选项。这是为什么呢? 是的,您对 xpath 的看法是正确的。单选按钮的 HTML 结构与仅更改 type="checkbox" 不同。我会用那个更新我的答案 嘿,谢谢,它现在可以工作了。但是,我还有一个问题。我已经更新了第一篇文章。可以看看吗?

以上是关于通过属性显示来自特定标签的项目的主要内容,如果未能解决你的问题,请参考以下文章

您如何通过传递参数从fllite中显示来自sqlite的特定数据

vue项目中网络图片无法显示

如何使用反射调用项目范围的属性?

禁用特定标签栏项目排序的最佳方法

在选择时将 wfs 属性显示为标签

在选择时将wfs属性显示为标签