2011-04-01 38 views
1

我想檢索與XSL模板我的XML文件的價值,但我不知道如何找回這些價值...XSL subtrings與模式

我有這樣的XML文件

<BlastOutput_iterations> 
<Iteration> 
    <Iteration_iter-num>1</Iteration_iter-num> 
    <Iteration_query-ID>Query_1</Iteration_query-ID> 
    <Iteration_query-def>Teg18as_antisens</Iteration_query-def> 
    <Iteration_query-len>865</Iteration_query-len> 
    <Iteration_hits> 
    <Hit> 
     <Hit_num>1</Hit_num> 
     <Hit_id>gnl|BL_ORD_ID|30</Hit_id> 
     <Hit_def>gi|150392480|ref|NC_009632.1| Staphylococcus aureus subsp. aureus JH1, complete genome</Hit_def> 
     <Hit_accession>2233</Hit_accession> 
     <Hit_len>2906507</Hit_len> 
     <Hit_hsps> 
     <Hsp> 
      <Hsp_num>1</Hsp_num> 
      <Hsp_bit-score>1561.20031714635</Hsp_bit-score> 
      <Hsp_score>1730</Hsp_score> 
      <Hsp_evalue>0</Hsp_evalue> 
      <Hsp_query-from>1</Hsp_query-from> 
      <Hsp_query-to>865</Hsp_query-to> 
      <Hsp_hit-from>355668</Hsp_hit-from> 
      <Hsp_hit-to>356532</Hsp_hit-to> 
      <Hsp_query-frame>1</Hsp_query-frame> 
      <Hsp_hit-frame>1</Hsp_hit-frame> 
      <Hsp_identity>865</Hsp_identity> 
      <Hsp_positive>865</Hsp_positive> 
      <Hsp_gaps>0</Hsp_gaps> 
      <Hsp_align-len>865</Hsp_align-len> 
      <Hsp_qseq>CAACTCGTTAGGACAATCACGATGATTGTCTACAGTTGCAGGTGGATTTGAATATACTACTAGTTATTTGTTGTCTAGGATAATAGATTTAGTATGTTGATAAGTTTGACTCAGATTTGTATTTTCTAATAAATGATAACTCACGATATCGATTAAAAAGAGTGTCGCAATTTGTGTGTTGATAAATTGATGGTCGGTATTACGCGATTGATCCGTTGTTAAAAGTACTAAATCTGCACAATCTGTAAGTTTACTACCTTCGAAATTTGTGATGGCAACGACATATGCACCATGAGATTTGGCGACTTCCGCTGCTGAAATTAATTCCGAAGTATTACCACTATTTGACATAGCAATAAACATGTCCGAATGAGATAGTAGGGATGCCGATATTTTCATTAAATGTGAATCGGTAGTAACATTACCTTTTAGCCCCATACGAATCATACGATAATAAAATTCAGTCGCTGATAAACCAGAGCTACCTAGTCCAGCAAAGAGTATATGTCGACTTGATTGGAGTTTGTCGATAAAGGTTTGGATAATGTCGTTATCAATAAATTCACCAGTTTGTTGAATGATTTGTTGATGATATTTATGAATTCTTTGAATAATTGGGCTATTTTCAATAACTGTCTCTGTCATTTCTTGTTGAATATTAAATTTTAAATCTTGGAAATTCTCATAATCTAGCTTATGACTAAAGCGTGTCATCGTTGCTGGTGATGTACCAATCGCATGGGCTAAGGAGTTAATCGTTGAAAAGGCATCGCTATAACCATTTTGTCTTATATAATTGACGATGCGTTTATCAGTTTTTGTAAATAAATGTTGATAACGTTGAACACGATTCTCAAATTTCATT</Hsp_qseq> 
      <Hsp_hseq>CAACTCGTTAGGACAATCACGATGATTGTCTACAGTTGCAGGTGGATTTGAATATACTACTAGTTATTTGTTGTCTAGGATAATAGATTTAGTATGTTGATAAGTTTGACTCAGATTTGTATTTTCTAATAAATGATAACTCACGATATCGATTAAAAAGAGTGTCGCAATTTGTGTGTTGATAAATTGATGGTCGGTATTACGCGATTGATCCGTTGTTAAAAGTACTAAATCTGCACAATCTGTAAGTTTACTACCTTCGAAATTTGTGATGGCAACGACATATGCACCATGAGATTTGGCGACTTCCGCTGCTGAAATTAATTCCGAAGTATTACCACTATTTGACATAGCAATAAACATGTCCGAATGAGATAGTAGGGATGCCGATATTTTCATTAAATGTGAATCGGTAGTAACATTACCTTTTAGCCCCATACGAATCATACGATAATAAAATTCAGTCGCTGATAAACCAGAGCTACCTAGTCCAGCAAAGAGTATATGTCGACTTGATTGGAGTTTGTCGATAAAGGTTTGGATAATGTCGTTATCAATAAATTCACCAGTTTGTTGAATGATTTGTTGATGATATTTATGAATTCTTTGAATAATTGGGCTATTTTCAATAACTGTCTCTGTCATTTCTTGTTGAATATTAAATTTTAAATCTTGGAAATTCTCATAATCTAGCTTATGACTAAAGCGTGTCATCGTTGCTGGTGATGTACCAATCGCATGGGCTAAGGAGTTAATCGTTGAAAAGGCATCGCTATAACCATTTTGTCTTATATAATTGACGATGCGTTTATCAGTTTTTGTAAATAAATGTTGATAACGTTGAACACGATTCTCAAATTTCATT</Hsp_hseq> 
      <Hsp_midline>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||</Hsp_midline> 
     </Hsp> 
     </Hit_hsps> 
    </Hit> 

    </Iteration_hits> 

</Iteration> 

和a想檢索NC_009632.1 in gi | 150392480 | ref | NC_009632.1 |金黃色葡萄球菌亞種。金黃色葡萄球菌JH1,完整的基因組,這些線的結構總是喜歡 「XX |號碼| XXX | value_to_retrieve |」

感謝幫助

+0

問得好,+1。查看我的答案,獲得一個有用的常規標記化模板,該模板用於完整且簡單的XSLT 1.0解決方案以查找所需的文本。 – 2011-04-02 14:59:17

回答

2
<xsl:template match="Hit_def"> 
    <xsl:value-of select="substring-before(
          substring-after(
           substring-after(
           substring-after(., '|'), 
           '|' 
          ), 
           '|' 
          ), 
          '|' 
         )"/> 
</xsl:template> 

用XSLT 1.0應該做的,用2.0

<xsl:template match="Hit_def"> 
    <xsl:value-of select="tokenize(., '|')[4]"/> 
</xsl:template> 

更容易。

+0

+1針對固定用例的有效答案。 – 2011-04-01 15:04:02

1

這是一個簡單的標記。人們可以使用該結果通過位置來訪問任何令牌:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="text()" name="tokenize"> 
    <xsl:param name="pText" select="concat(.,'|')"/> 
    <xsl:if test="string-length($pText)"> 
     <t> 
     <xsl:value-of select="substring-before($pText, '|')"/> 
     </t> 
     <xsl:call-template name="tokenize"> 
     <xsl:with-param name="pText" select= 
      "substring-after($pText, '|')"/> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

當應用於

<t>a|b|c|d|e|f|g|h</t> 

產生

<t>a</t> 
<t>b</t> 
<t>c</t> 
<t>d</t> 
<t>e</t> 
<t>f</t> 
<t>g</t> 
<t>h</t> 

最後,我們使用這個標記化技術來解決原始問題

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ext="http://exslt.org/common" > 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 


    <xsl:template match="/"> 
     <xsl:variable name="vrtfTokens"> 
     <xsl:call-template name="tokenize"> 
     <xsl:with-param name="pText" select= 
      "/*/*/*/*/Hit_def"/> 
     </xsl:call-template> 
     </xsl:variable> 

     <xsl:value-of select="ext:node-set($vrtfTokens)/*[4]"/> 
    </xsl:template> 

    <xsl:template match="text()" name="tokenize"> 
     <xsl:param name="pText" select="concat(.,'|')"/> 
     <xsl:if test="string-length($pText)"> 
      <t> 
       <xsl:value-of select="substring-before($pText, '|')"/> 
      </t> 
      <xsl:call-template name="tokenize"> 
       <xsl:with-param name="pText" select= 
       "substring-after($pText, '|')"/> 
      </xsl:call-template> 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

當這種轉變是在所提供的XML文檔應用:

<BlastOutput_iterations> 
    <Iteration> 
     <Iteration_iter-num>1</Iteration_iter-num> 
     <Iteration_query-ID>Query_1</Iteration_query-ID> 
     <Iteration_query-def>Teg18as_antisens</Iteration_query-def> 
     <Iteration_query-len>865</Iteration_query-len> 
     <Iteration_hits> 
      <Hit> 
       <Hit_num>1</Hit_num> 
       <Hit_id>gnl|BL_ORD_ID|30</Hit_id> 
       <Hit_def>gi|150392480|ref|NC_009632.1| Staphylococcus aureus subsp. aureus JH1, complete genome</Hit_def> 
       <Hit_accession>2233</Hit_accession> 
       <Hit_len>2906507</Hit_len> 
       <Hit_hsps> 
        <Hsp> 
         <Hsp_num>1</Hsp_num> 
         <Hsp_bit-score>1561.20031714635</Hsp_bit-score> 
         <Hsp_score>1730</Hsp_score> 
         <Hsp_evalue>0</Hsp_evalue> 
         <Hsp_query-from>1</Hsp_query-from> 
         <Hsp_query-to>865</Hsp_query-to> 
         <Hsp_hit-from>355668</Hsp_hit-from> 
         <Hsp_hit-to>356532</Hsp_hit-to> 
         <Hsp_query-frame>1</Hsp_query-frame> 
         <Hsp_hit-frame>1</Hsp_hit-frame> 
         <Hsp_identity>865</Hsp_identity> 
         <Hsp_positive>865</Hsp_positive> 
         <Hsp_gaps>0</Hsp_gaps> 
         <Hsp_align-len>865</Hsp_align-len> 
         <Hsp_qseq>CAACTCGTTAGGACAATCACGATGATTGTCTACAGTTGCAGGTGGATTTGAATATACTACTAGTTATTTGTTGTCTAGGATAATAGATTTAGTATGTTGATAAGTTTGACTCAGATTTGTATTTTCTAATAAATGATAACTCACGATATCGATTAAAAAGAGTGTCGCAATTTGTGTGTTGATAAATTGATGGTCGGTATTACGCGATTGATCCGTTGTTAAAAGTACTAAATCTGCACAATCTGTAAGTTTACTACCTTCGAAATTTGTGATGGCAACGACATATGCACCATGAGATTTGGCGACTTCCGCTGCTGAAATTAATTCCGAAGTATTACCACTATTTGACATAGCAATAAACATGTCCGAATGAGATAGTAGGGATGCCGATATTTTCATTAAATGTGAATCGGTAGTAACATTACCTTTTAGCCCCATACGAATCATACGATAATAAAATTCAGTCGCTGATAAACCAGAGCTACCTAGTCCAGCAAAGAGTATATGTCGACTTGATTGGAGTTTGTCGATAAAGGTTTGGATAATGTCGTTATCAATAAATTCACCAGTTTGTTGAATGATTTGTTGATGATATTTATGAATTCTTTGAATAATTGGGCTATTTTCAATAACTGTCTCTGTCATTTCTTGTTGAATATTAAATTTTAAATCTTGGAAATTCTCATAATCTAGCTTATGACTAAAGCGTGTCATCGTTGCTGGTGATGTACCAATCGCATGGGCTAAGGAGTTAATCGTTGAAAAGGCATCGCTATAACCATTTTGTCTTATATAATTGACGATGCGTTTATCAGTTTTTGTAAATAAATGTTGATAACGTTGAACACGATTCTCAAATTTCATT</Hsp_qseq> 
         <Hsp_hseq>CAACTCGTTAGGACAATCACGATGATTGTCTACAGTTGCAGGTGGATTTGAATATACTACTAGTTATTTGTTGTCTAGGATAATAGATTTAGTATGTTGATAAGTTTGACTCAGATTTGTATTTTCTAATAAATGATAACTCACGATATCGATTAAAAAGAGTGTCGCAATTTGTGTGTTGATAAATTGATGGTCGGTATTACGCGATTGATCCGTTGTTAAAAGTACTAAATCTGCACAATCTGTAAGTTTACTACCTTCGAAATTTGTGATGGCAACGACATATGCACCATGAGATTTGGCGACTTCCGCTGCTGAAATTAATTCCGAAGTATTACCACTATTTGACATAGCAATAAACATGTCCGAATGAGATAGTAGGGATGCCGATATTTTCATTAAATGTGAATCGGTAGTAACATTACCTTTTAGCCCCATACGAATCATACGATAATAAAATTCAGTCGCTGATAAACCAGAGCTACCTAGTCCAGCAAAGAGTATATGTCGACTTGATTGGAGTTTGTCGATAAAGGTTTGGATAATGTCGTTATCAATAAATTCACCAGTTTGTTGAATGATTTGTTGATGATATTTATGAATTCTTTGAATAATTGGGCTATTTTCAATAACTGTCTCTGTCATTTCTTGTTGAATATTAAATTTTAAATCTTGGAAATTCTCATAATCTAGCTTATGACTAAAGCGTGTCATCGTTGCTGGTGATGTACCAATCGCATGGGCTAAGGAGTTAATCGTTGAAAAGGCATCGCTATAACCATTTTGTCTTATATAATTGACGATGCGTTTATCAGTTTTTGTAAATAAATGTTGATAACGTTGAACACGATTCTCAAATTTCATT</Hsp_hseq> 
         <Hsp_midline>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||</Hsp_midline> 
        </Hsp> 
       </Hit_hsps> 
      </Hit> 
     </Iteration_hits> 
    </Iteration> 
</BlastOutput_iterations> 

想要的,正確的結果產生

NC_009632.1 
+0

有了這個設計,我認爲你應該使用'substring-before(concat($ pText,'|'),'|')'來放棄最後一個標記。 – 2011-04-01 15:01:59

+0

@Alejandro:趕上!我在離開工作前1分鐘寫了這篇文章 - 現在修復:) – 2011-04-01 15:57:08

+0

+1好答案。 – 2011-04-02 17:19:53