2016-10-13 12 views
1

私はXSLTについて非常に複雑な要件を持っています。私はその値の部分文字列に等しい値でフィールドを数える必要があります。私はそれらを数えることができましたが、問題は文脈です。xsltは部分文字列と異なる文脈を数えます

  <root> 
      <Manager>TC4:12345</Manager> 
      <Staff> 
       <employee>TC3:22222</employee> 
       <employee>TC3:11111</employee> 
       <employee>TC3:33333</employee> 
      </Staff> 
      </root> 
     <root> 
      <Manager>TC4:67890</Manager> 
      <Staff> 
       <employee>TC3:44444</employee> 
       <employee>TC3:55555</employee> 
       <employee>TC3:66666</employee> 
      </Staff> 
      </root> 

出力はこのようなものでなければなりません:

  <Manager> 
      <Seniors> 
      <Count>3</Count> 
      </Seniors> 
      </Manager> 
      <Manager> 
      <Seniors> 
      <Count>3</Count> 
      </Seniors> 
      </Manager> 

TC3の役割を持つ従業員の数その後、TC3の役割を持つ従業員の数があったが、第一管理者のためにカウントされた以下のサンプルを参照してください。 2番目のマネージャーにもカウントされます。私はこれをやってみましたが、私はあなたの中、テンプレートmatch="root"を書き、また第二のコンテキストではなく、3と3

を第一コンテキストで6,6をこれが私のコード

<xsl:value-of select="count(//root/Staff/employee[substring(.,1,3) = 'TC3'])"> 

答えて

0

:ここ

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" /> 
    <xsl:template match="body"> 
     <xsl:for-each select="root"> 
      <Manager> 
      <Seniors> 
       <Count><xsl:value-of select="count(./Staff/employee[substring(.,1,3) = 'TC3'])" /></Count> 
      </Seniors> 
      </Manager> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

は、私が使用したソースです:

<?xml version="1.0" encoding="UTF-8"?> 
<body> 
    <root> 
     <Manager>TC4:12345</Manager> 
     <Staff> 
      <employee>TC3:22222</employee> 
      <employee>TC3:11111</employee> 
      <employee>TC3:33333</employee> 
     </Staff> 
     </root> 
    <root> 
     <Manager>TC4:67890</Manager> 
     <Staff> 
      <employee>TC3:44444</employee> 
      <employee>TC3:55555</employee> 
      <employee>TC3:66666</employee> 
     </Staff> 
    </root> 
</body> 

そして、ここで出力されます:

<Manager> 
    <Seniors> 
    <Count>3</Count> 
    </Seniors> 
</Manager><Manager> 
    <Seniors> 
    <Count>3</Count> 
    </Seniors> 
</Manager> 
+1

これはbinarymax !!!ありがとう!!!それは/スタッフがすることができます前に単純なドット何か驚くべきです! –

0

された終わります<xsl:value-of select="count(Staff/employee[substring(.,1,3) = 'TC3'])"/>を使用できます。あなたは(bodyタグに包まれているすべてのXMLと仮定した場合)されている。ここ

+0

はいマーティン、それはテンプレートマッチの中にあります:) –

関連する問題