2017-01-16 5 views
0

私は、電話番号の入った大きなXMLを持っています。XSLT:結果を出さない文を選択

<contact> 
     <id>239763415</id> 
     <first_name>abc</first_name> 
     <last_name>bbb</last_name> 
     <email> 
      <id>230417772952</id> 
      <email_address>[email protected]</email_address> 
      <is_primary>true</is_primary> 
     </email> 
     <phone> 
      <id>327466887779</id> 
      <phone_number>7738908907</phone_number> 
      <extension>8907</extension> 
      <country_code>1</country_code> 
      <display_name>17738908907</display_name> 
      <is_primary>true</is_primary> 
      <type_id>1201</type_id> 
      <type_code>Office</type_code> 
     </phone> 
     <phone> 
      <id>327466890</id> 
      <phone_number>312405226463</phone_number> 
      <country_code>1</country_code> 
      <display_name>13124056463</display_name> 
      <is_primary>false</is_primary> 
      <type_id>1202</type_id> 
      <type_code>Mobile</type_code> 
     </phone> 

これはXMLの一部です。要件は、「is_primary」がtrueの場合、「is_primary」falseで、それはこれは私がしようとしたものです列2

[email protected],7738908907,312405226463 

に来る必要ならば、電話番号が他のカラム1に来るべきであるということです。コードの残りの部分が他の要件に準拠するように、最後の部分を考慮してください。

答えて

1

"phone_number_1"と "phone_number_2"という見出しの列に電話番号を入力することを前提としています。現時点では、電話番号を取得するコードは行の最後、「responsibility_name」の後ろに置きます。

ここにxsl:chooseは必要ありません。あなたはxsl:value-of文自体

<xsl:value-of select="ns:phone[ns:is_primary = 'true']/ns:phone_number" /> 

に条件を置くことができ、ここでアポストロフィの使用に注意してください。 ns:is_primary = trueの場合は、 "true"という値だけでなく、 "true"という名前のXML要素を探します。

さらにコードを簡単にレイアウトするために、<xsl:text>を使用することをお勧めします。

最後の4列出力にこのXSLTスニペットを試してみてください

<xsl:value-of select="normalize-space(ns:email/ns:email_address)"/> 
<xsl:text>|</xsl:text> 
<xsl:value-of select="ns:phone[ns:is_primary = 'true']/ns:phone_number" /> 
<xsl:text>|</xsl:text> 
<xsl:value-of select="ns:phone[ns:is_primary = 'false']/ns:phone_number" /> 
<xsl:text>|</xsl:text> 
<xsl:for-each select="(ns:bp_contact/ns:role/ns:responsibility)"> 
    <xsl:value-of select="(ns:responsibility_name)"/> 
    <xsl:if test="position() != last()"> 
     <xsl:text>;</xsl:text> 
    </xsl:if> 
</xsl:for-each>    
関連する問題