代码之家  ›  专栏  ›  技术社区  ›  oluies

复制并附加元素(从XSD生成WSDL)

  •  2
  • oluies  · 技术社区  · 15 年前

        ....
        <!-- WSDL types  -->
        <xsl:template name="types">
            <wsdl:types>
                <xsl:copy-of select="/xsd:schema"/>
            </wsdl:types>
        </xsl:template>
        .... 
    

    现在我还想在 schema 元素,什么是最好的方法。

    我是 using this XSLT 作为我工作的基准。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Per T    15 年前

    你需要改变你处理 xsd:schema . 目前你只是在做一个直接的拷贝,这使得它不可能改变的内容 xsd:架构

    你需要做的是改变你的 xsl:copy-of xsl:apply-templates . 这样做可以让您通过编写适当的匹配模板以任何方式修改内容,同时使用标识模板复制不想修改的内容:

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

    最好,你可以用 mode 为了让您的处理过程确保您只影响您想要的节点(请参阅文章末尾的我的评论):

    ....
    <!-- WSDL types  -->
    <xsl:template name="types">
      <wsdl:types>
        <xsl:apply-templates select="/xsd:schema" mode="schema"/>
      </wsdl:types>
    </xsl:template>
    ....
    

    xsl:copy of . 但是现在您可以轻松地添加、更改或修改 /xsd:schema xsd:架构

    <xsl:template match="xsd:schema" mode="schema">
      <xsl:copy>
        <!-- This will ensure further processing. -->
        <xsl:apply-templates select="@*|node()" mode="#current"/>
        <!-- Adds a child node to xsd:schema. -->
        <xsd:element name="...">
          ...
        </xsd:element>
      </xsl:copy>
    </xsl:template>
    

    我自己还没有使用过WSDL,所以我希望我现在没有误解您!


    对不起,你不需要 模式 以简化处理过程。我看错了你的问题,虽然输入文档不是XSD。不会痛,但也帮不了你什么。

        2
  •  1
  •   Dimitre Novatchev    15 年前

    :

    <!-- WSDL types  --> 
    <xsl:template name="types"> 
        <wsdl:types>
           <xsl:for-each select="/xsd:schema">
            <xsl:copy>
              <xsl:copy-of select="node()|@*"/>
    
              <!-- Add your additional types here, for example:  -->
              <xsl:copy-of select="$vMyNewTypes"/>
            <xsl:copy>
           </xsl:for-each> 
        </wsdl:types> 
    </xsl:template> 
    
    推荐文章