Подстроки Xsl с рисунком - PullRequest
       10

Подстроки Xsl с рисунком

1 голос
/ 01 апреля 2011

Я хотел бы получить значение моего xml-файла с помощью шаблона xsl, но я не знаю, как получить это значение ...

У меня есть этот 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 в gi | 150392480 | ref | NC_009632.1 | Staphylococcus aureus subsp. aureus JH1, полный геном, структура этих строк всегда похожа на «xx | number | xxx | value_to_retrieve |»

благодарю за помощь

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011
<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>

проще.

1 голос
/ 01 апреля 2011

Вот простой токенизация.Результат можно использовать для доступа к любому токену по позиции:

<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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...