วิธีต่อสตริงเป็น xsl: value-of select = "…?


93
<a>
    <xsl:attribute name="href"> 
     <xsl:value-of select="/*/properties/property[@name='report']/@value" />
    </xsl:attribute>
</a>    

มีวิธีใดบ้างในการแคตสตริงอื่นไปยัง

<xsl:value-of select="/*/properties/property[@name='report']/@value"  />

ฉันต้องการส่งข้อความบางส่วนไปยังแอตทริบิวต์ href นอกเหนือจากค่าคุณสมบัติรายงาน

คำตอบ:


151

คุณสามารถใช้ฟังก์ชัน xpath ที่มีชื่อเรียกว่าconcat ได้ที่นี่

<a>
   <xsl:attribute name="href">
      <xsl:value-of select="concat('myText:', /*/properties/property[@name='report']/@value)" />
   </xsl:attribute>
</a>  

แน่นอนว่าไม่จำเป็นต้องเป็นข้อความที่นี่ แต่อาจเป็นนิพจน์ xpath อื่นเพื่อเลือกองค์ประกอบหรือแอตทริบิวต์ และคุณสามารถมีอาร์กิวเมนต์จำนวนเท่าใดก็ได้ในนิพจน์ concat

โปรดทราบว่าคุณสามารถใช้ประโยชน์จากเทมเพลตค่าแอตทริบิวต์ (แสดงโดยวงเล็บปีกกา) ที่นี่เพื่อทำให้การแสดงออกของคุณง่ายขึ้น

<a href="{concat('myText:', /*/properties/property[@name='report']/@value)}"></a>

2
@TimC: ดี แต่concat()ฟังก์ชั่นไม่จำเป็นที่นี่
Dimitre Novatchev

ฉันมีแท็กต่อไปนี้: <a title="" href="https://stackoverflow.com/page.cfm?id=425">Anders, John</a>และฉันต้องการสร้างฟิลด์ที่ซ่อนอยู่ใน XSLT ซึ่งใช้เฉพาะ ID # ฉันจะบรรลุสิ่งนั้นได้อย่างไร?
SearchForKnowledge

27

สามคำตอบ:

ง่าย:

<img>
    <xsl:attribute name="src">
        <xsl:value-of select="//your/xquery/path"/>
        <xsl:value-of select="'vmLogo.gif'"/>
    </xsl:attribute>
</img>

การใช้ 'concat':

<img>
    <xsl:attribute name="src">
        <xsl:value-of select="concat(//your/xquery/path,'vmLogo.gif')"/>                    
    </xsl:attribute>
</img>

ทางลัดแอตทริบิวต์ตามที่ @TimC แนะนำ

<img src="{concat(//your/xquery/path,'vmLogo.gif')}" />

2
ตามที่ Dimitre ระบุไว้คุณไม่จำเป็นต้องเชื่อมต่อที่นี่:<img src="{//your/xpath}vmLogo.gif" />
Svish


5

วิธีที่ง่ายที่สุดในการต่อสตริงข้อความแบบคงที่เข้ากับค่าที่เลือกคือการใช้ ธาตุ.

<a>
  <xsl:attribute name="href"> 
    <xsl:value-of select="/*/properties/property[@name='report']/@value" />
    <xsl:text>staticIconExample.png</xsl:text>
  </xsl:attribute>
</a>

1

วิธีที่ง่ายที่สุดคือ

  <TD>
    <xsl:value-of select="concat(//author/first-name,' ',//author/last-name)"/>
  </TD>

เมื่อโครงสร้าง XML คือ

<title>The Confidence Man</title>
<author>
  <first-name>Herman</first-name>
  <last-name>Melville</last-name>
</author>
<price>11.99</price>

0

ไม่ใช่วิธีการแก้ปัญหาที่อ่านง่ายที่สุด แต่คุณสามารถผสมผลลัพธ์จากค่าของกับข้อความธรรมดา:

<a>
  <xsl:attribute name="href"> 
    Text<xsl:value-of select="/*/properties/property[@name='report']/@value"/>Text
  </xsl:attribute>
</a>

1
สิ่งนี้มีปัญหา: ระหว่างคำแนะนำ XSLT ช่องว่างเฉพาะโหนดข้อความจะถูกละเว้น แต่ตอนนี้คุณมีโหนดข้อความที่ไม่ใช่พื้นที่สีขาวเท่านั้น ( ' Text') ช่องว่าง (แม้แต่บรรทัดใหม่) จะถูกส่งออก
Alejandro
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.