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

我认为与其尝试拆分示例元素上的@id 属性,这在XSLT1-0 中有点混乱,不如尝试匹配其@id 出现在属性的@id 中的emp元素

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

请注意使用逗号来确保 @id 为 1 的示例不会被 @id 为 11 的示例拾取

这是完整的 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 回答