0

XSLT1.0 を使用して xml から値を分割しようとしています。次のような XML があります。

<employees>
    <examples>
       <example id="1,2,3">
       </example>
    </examples>

   <emp id="1">
     <name>john</name>
   </emp>
   <emp id="2">
     <name>raj</name>
   </emp>
   <emp id="3">
     <name>sat</name>
   </emp>

</employees>

サンプルタグからIDを抽出して分割し、empタグから値を取得して、出力が

<employees>
    <employee>
        <id>1</id>
        <name>john</name>
    </employee>
    <employee>
        <id>2</id>
        <name>raj</name>
    </employee>
    <employee>
        <id>3</id>
        <name>sat</name>
    </employee>

</employees>
4

1 に答える 1

0

XSLT1-0 では少し面倒ですが、例の要素で@id 属性を分割しようとするのではなく、属性の @id に @id が現れるemp要素を試して一致させることができると思います。

 <xsl:variable name="ids" select="concat(',', examples/example/@id, ',')"/>
 <xsl:apply-templates select="emp[contains($ids, concat(',', @id, ','))]"/>

1 の @id が 11 の @id の例によって取得されないようにするためにコンマを使用していることに注意してください。

ここに完全な XSLT があります

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

   <xsl:template match="employees">
      <employees>
         <xsl:variable name="ids" select="concat(',', examples/example/@id, ',')"/>
         <xsl:apply-templates select="emp[contains($ids, concat(',', @id, ','))]"/>
      </employees>
   </xsl:template>

   <xsl:template match="emp">
      <employee>
         <id>
            <xsl:value-of select="@id"/>
         </id>
         <xsl:apply-templates select="node()"/>
      </employee>
   </xsl:template>

   <xsl:template match="@*|node()">
      <xsl:copy>
         <xsl:apply-templates select="@*|node()"/>
      </xsl:copy>
   </xsl:template>
</xsl:stylesheet>

サンプル XML に適用すると、次のように出力されます。

<employees>
   <employee>
      <id>1</id>
      <name>john</name>
   </employee>
   <employee>
      <id>2</id>
      <name>raj</name>
   </employee>
   <employee>
      <id>3</id>
      <name>sat</name>
   </employee>
</employees>
于 2012-08-14T10:23:19.393 に答える