0

私はxslの初心者です。
同じ名前(「名前」+「姓」ではない名前)のユーザーのトラフィックの合計を計算する必要があります。たとえば、「Jonh」という名前のすべてのユーザーのトラフィックの合計を計算します。また、xslバージョンは1.0のみである必要があります。
同じ問題のトピックを見つけました

http://social.msdn.microsoft.com/Forums/eu/xmlandnetfx/thread/c9f09ba6-1c79-43df-bbc2-3966710fff23

私はそれを使おうとしました:

<span>Total: <xsl:value-of select="sum(//user[contains(name,'Jonh')]../traffic)" /></span>

また

<span>Total: <xsl:value-of select="sum(//user[contains(name,'Jonh')]/traffic)" /></span>

しかし、効果はありません。合計は計算されません。誰かが私が解決策を見つけるのを手伝ってくれますか?

XMLファイル

<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='traffic.xsl'?>
<root>
   <user>
       <name>Jonh Connor</name>
       <traffic>800</traffic>
   </user>
   <user>
       <name>John Kennedy</name>
       <traffic>200</traffic>
   </user>
   <user>
       <name>Jack London</name>
       <traffic>100</traffic>
   </user>
   <user>
       <name>Sema Schlumberger</name>
       <traffic>300</traffic>
   </user>
   <user>
       <name>Jack Vorobey</name>
       <traffic>700</traffic>
   </user>
   <user>
       <name>John Lennon</name>
       <traffic>500</traffic>
   </user>
   <user>
       <name>John Romero</name>
       <traffic>4003</traffic>
   </user>
</root>
4

2 に答える 2

1

2番目の式は機能します...

 <xsl:value-of select="sum(//user[contains(name,'Jonh')]/traffic)" />

私はこれをテストしました、そしてそれは働きます。名前の明らかなタイプミスに注意してください:「Jonh」と「John」。

式は正しいですが、サンプル入力によって示される構造に依存できる場合は、コンテキストノードがドキュメントルートである場合は、より効率的なソリューションを選択できます。

 <xsl:value-of select="sum(root/user/name[contains(.,'Jonh')]/../traffic)" />

警告

この形式の表現は、名前と名前の一部を区別しません。したがって、「Rom」を合計すると、「JohnRomero」の姓に「Rom」が含まれているため、4003が得られます。これが望ましい結果でない場合は、マッチングのルールを明確にする必要があります。

于 2012-07-18T06:40:00.387 に答える
0

2番目の式は正常に機能します。contains()とにかく、計算に誤りが生じる可能性があるため、式から関数を削除したいと思います。「John」という名前のユーザーのみの結果を取得するには、以下の例を使用する必要があります。

<span>Total: <xsl:value-of select="sum(/root/user[name = 'Jonh']/traffic)" /></span>
于 2012-07-18T06:51:36.720 に答える