0

我想编写一个模板来处理某些部分并重用它。

在下面的 XML 中,我们看到 Message 在每个 ,, 中重复。我想编写一个模板来处理并在需要时调用它。

        <Data>

           <A>
              <text>this is text</text>
              <Message>
                <local>Local  link</local>
                <STD>External link</STD>
                </Message>
            </A>
            <B>
               <info>Information</info>
               <Message>
                <local>Local uri link</local>
                <STD>External link uri</STD>

                </Message>
            </B>
            <C>
               <longtext>Long Text</longtext>
               <Message>
                <local>Local uri link</local>
                <STD>External link uri</STD>

                </Message>
                </C>
        <Data>

需要的输出:

    <Information>     
          <AA>
                this is text
                <MSG local value="Local uri link" STD value="External link"/>
            </AA>

            <BB>
                Information
                <MSG local value  ="Local uri link"  STD value="External link"/>

            </BB>
            <CC>
                Long Text
                <MSG local value="Local uri link" STD value="External link"/>
            </CC>

    <Information>

在处理每个节点中的标签时,我正在为 A、B、C 中的每个标签编写代码。

编写的示例代码

    <Information>

        <xsl:template match="A">
        <AA>
            <xsl:value-of select="text"/>
            <xsl:element name="MSG">
                <xsl:attribute name="local value">
                    <xsl:value-of select="Message/local"/>
                </xsl:attribute>
                <xsl:attribute name="STD value">
                    <xsl:value-of select="Message/STD"/>
                </xsl:attribute>
        </AA>
    </Information>

同样,对于每个模板,我都明确地为块 MSG 编写代码。

现在我想写一个单独的模板来处理。我想从每个模板中调用这个模板。

基本上我想重用编写的代码来处理

任何人都可以帮助我如何做到这一点。

谢谢你。

4

1 回答 1

3

这是一个示例:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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

<xsl:template match="Data">
  <Information>
    <xsl:apply-templates/>
  </Information>
</xsl:template>

<xsl:template match="Data/*">
  <xsl:element name="{local-name()}{local-name()}">
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

<xsl:template match="Data/A/text | Data/B/info | Data/C/longtext">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="Message">
  <MSG local-value="{local}" STD-value="{STD}"/>
</xsl:template>

</xsl:stylesheet>

当应用于输入时

<Data>

   <A>
      <text>this is text</text>
      <Message>
        <local>Local  link</local>
        <STD>External link</STD>
        </Message>
    </A>
    <B>
       <info>Information</info>
       <Message>
        <local>Local uri link</local>
        <STD>External link uri</STD>

        </Message>
    </B>
    <C>
       <longtext>Long Text</longtext>
       <Message>
        <local>Local uri link</local>
        <STD>External link uri</STD>

        </Message>
        </C>
</Data>

撒克逊 6.5.5 输出

<?xml version="1.0" encoding="utf-8"?><Information>

           <AA>
              this is text
              <MSG local-value="Local  link" STD-value="External link"/>
            </AA>
            <BB>
               Information
               <MSG local-value="Local uri link" STD-value="External link uri"/>
            </BB>
            <CC>
               Long Text
               <MSG local-value="Local uri link" STD-value="External link uri"/>
                </CC>
        </Information>

您发布的输入示例和想要的输出示例都不是格式正确的 XML,因此我必须对元素或属性名称进行一些更改才能处理和输出 XML。

于 2012-05-29T11:21:36.967 回答