найти номер в строке с помощью регулярного выражения + xslt - PullRequest
1 голос
/ 20 марта 2012

Я пытаюсь получить количество комментариев из описания следующего XML-кода:

    <item>
        <title>War Stats</title>
        <link>http://www.reddit.com/r/politics/comments/r3p6r/war_stats/</link>
        <guid isPermaLink="true">http://www.reddit.com/r/politics/comments/r3p6r/war_stats/</guid>
        <pubDate>Mon, 19 Mar 2012 10:30:01 -0700</pubDate>
        <description>submitted by &lt;a href="http://www.reddit.com/user/focusing"&gt; focusing &lt;/a&gt; to &lt;a href="http://www.reddit.com/r/politics/"&gt; politics&lt;/a&gt; &lt;br/&gt; &lt;a href="http://i.imgur.com/8HpWg.jpg"&gt;[link]&lt;/a&gt; &lt;a href="http://www.reddit.com/r/politics/comments/r3p6r/war_stats/"&gt;[634 comments]&lt;/a&gt;</description>
    </item>

, как вы можете видеть, я хочу получить число 634 из него и поместить его ватрибут «Score» нового XML-файла

<xsl:attribute name="score">
    <xsl:analyze-string select='description' regex='\d'>
        <xsl:matching-substring>
            <number><xsl:value-of select='.' /></number>
        </xsl:matching-substring>
    </xsl:analyze-string>

</xsl:attribute>

, но я думаю, что я делаю это неправильно ..

это весь код:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:a="http://www.w3.org/2005/Atom"
xmlns:media='http://search.yahoo.com/mrss/'>


<xsl:template match="/">

<xsl:for-each select="/rss/channel/item">
<item>
    <xsl:attribute name="type">reddit</xsl:attribute>
    <xsl:variable name="redditTitle" content="title" />
    <xsl:attribute name="name">
        <xsl:if test="string-length(title) &gt; 50">
            <xsl:value-of select="concat(substring(title, 1, 75), '...')" />    
        </xsl:if>
        <xsl:if test="string-length(title) &lt; 50">
            <xsl:value-of select="title" />
        </xsl:if>
    </xsl:attribute>

    <xsl:attribute name="url">
        <xsl:value-of select="link" />
    </xsl:attribute>

    <xsl:attribute name="image">http://dl.dropbox.com/u/8226356/Unief/DatabasesWebtechnologie/Praktijk/Project/Reddit_logo.thumbnail.png</xsl:attribute>

    <xsl:attribute name="score">
        <xsl:analyze-string select='description' regex='[0-9]+'>
            <xsl:matching-substring>
                <xsl:value-of select='.' />
            </xsl:matching-substring>
        </xsl:analyze-string>

    </xsl:attribute>
</item>
</xsl:for-each>

</xsl:template>

</xsl:stylesheet>

Может кто-нибудь объяснить мне, как это сделать правильно?

1 Ответ

2 голосов
/ 20 марта 2012

Регулярное выражение \d соответствует символу из одной цифры, я думаю, вы хотите, чтобы \d+ или [0-9]+ соответствовали последовательности цифр.И xsl:attribute выводит узел атрибута, я не понимаю, почему внутри этого вы бы хотели создать узел элемента с <number>...</number>, поскольку атрибуты не могут содержать элементы.Поэтому убедитесь, что вы используете xsl:attribute внутри элемента результата или xsl:element, а затем для значения атрибута просто используйте <xsl:value-of select="."/>, тогда ваш код должен работать.Если у вас все еще есть проблемы, объясните более подробно, какой выход вы хотите.

...