Gre*_*oud 2 xml xslt mxml .net-3.5
我试图在这些约束下工作,我正在使用XSLT 1.0 {在.net}.我希望能够做到以下几点:我是xsl:for-each'ing通过一组类型的节点
   <node>
     <data> unknown unstructured xml </data>
     <owner></owner>
   </node>
我希望能够输出
   <node>
     <data> unknown unstructured xml </data>
     <!--RESULT of calling an XSL template with certain parameters -->
   </node>
从我的搜索到目前为止,我想我可以做这样的事情在这里:
    <xsl:copy> 
        <xsl:apply-template name="findownerdetails">
           <xsl:with-param name="data" select="something" />
        </xsl:apply-template> 
    </xsl:copy> 
但这显然无效.任何建议如何使这个工作或实现类似的东西?我担心我不能只调用apply-templates作为我想要的模板将取决于我通过节点元素列表构建的每个数据.
任何建议表示赞赏
这是使用和覆盖标识规则最好解决的问题的典型示例:
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>
 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>
 <xsl:template match="owner">
    <owner-details>
      <xsl:value-of select="."/>
    </owner-details>
 </xsl:template>
</xsl:stylesheet>
在此XML文档上应用此转换时(基于提供的XML文档以及添加的属性和所有者详细信息):
<node attr1="x" attr2="y">
    <data> unknown unstructured xml </data>
    <owner>
        <details>
            <name>John Smith </name>
            <profession>XSLT programmer</profession>
        </details>
    </owner>
</node>
产生了想要的结果:
<node attr1="x" attr2="y">
   <data> unknown unstructured xml </data>
   <owner-details>John Smith XSLT programmer</owner-details>
</node>
请注意:
身份模板以递归方式"按原样" 复制文档中的每个节点.
我们只覆盖要以其他方式处理的元素的标识模板.任何模板的匹配模式都比标识模板更具体,它会覆盖它 - XSLT处理器总是为节点选择最具体的匹配模板.
使用和覆盖标识规则是最基本,最强大,最通用和最优雅的XSLT设计模式.它几乎专门用于所有XSLT转换:用于删除/重命名/修改/添加特定节点并保持所有其他节点完好无损.
OP在评论中建议该解决方案不允许传递参数.事实并非如此.可以编写任何模板(包括标识规则)以具有参数 - 当需要时.在这种特殊情况下,没有必要通过模板传递参数.
模板匹配owner 不需要调用另一个模板 - 所有特定于所有者的处理都可以在此处完成.
| 归档时间: | 
 | 
| 查看次数: | 877 次 | 
| 最近记录: |