Xslt xml文件的xsl实现

Xslt xml文件的xsl实现,xslt,Xslt,需要转换具有标记(dynamicVariable)且具有属性(name)的xml文件。必须使用xsl将此xml文件转换为相同的xml文件,以便标记(dynamicVariable)应具有相同的结构,并且标记内容也应为属性的值 需要转换下面的xml文件 <Content> <alertHeader> <text xmlns="http://abc.com" xmlns:w="http://def.com"> Claim

需要转换具有标记(dynamicVariable)且具有属性(name)的xml文件。必须使用xsl将此xml文件转换为相同的xml文件,以便标记(dynamicVariable)应具有相同的结构,并且标记内容也应为属性的值

需要转换下面的xml文件

   <Content>
     <alertHeader>
         <text xmlns="http://abc.com" xmlns:w="http://def.com"> Claim  
           <dynamicVariable name="Claim_Reference" />: More Information Needed
         </text>
         <contactUs>false</contactUs>
     </alertHeader>


     <body>
         <text> ATM/Debit Card Claim: 
         <strong><dynamicVariable name="Claim_Reference" /></strong>
         </text>
     </body>

         </Content>

主张
:需要更多信息
假的
ATM/借记卡索赔:

转换为相同的格式,但具有“name”属性的标记应作为此格式显示在输出xml文件中

      <dynamicVariable name="Claim_Reference" />Claim_Reference</dynamicVariable>
索赔参考
任何人都可以在转换时提供必要的xsl文件。希望它能用上

    <xsl:copy></xsl:copy>  or <xsl:copy-of /> tags .
或标签。

就这么简单

<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="*[name() = 'dynamicVariable']">
      <xsl:copy>
        <xsl:copy-of select="@*"/>
        <xsl:value-of select="@name"/>
      </xsl:copy>
     </xsl:template>
</xsl:stylesheet>
<Content>
    <alertHeader>
        <text xmlns="http://abc.com" xmlns:w="http://def.com"> Claim              
            <dynamicVariable name="Claim_Reference" />: More Information Needed          
        </text>
        <contactUs>false</contactUs>
    </alertHeader>
    <body>
        <text> ATM/Debit Card Claim:           
            <strong>
                <dynamicVariable name="Claim_Reference" />
            </strong>
        </text>
    </body>
</Content>
<Content>
   <alertHeader>
      <text xmlns="http://abc.com" xmlns:w="http://def.com"> Claim
            <dynamicVariable name="Claim_Reference">Claim_Reference</dynamicVariable>: More Information Needed
        </text>
      <contactUs>false</contactUs>
   </alertHeader>
   <body>
      <text> ATM/Debit Card Claim:
            <strong>
            <dynamicVariable name="Claim_Reference">Claim_Reference</dynamicVariable>
         </strong>
      </text>
   </body>
</Content>

当此转换应用于提供的XML文档时

<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="*[name() = 'dynamicVariable']">
      <xsl:copy>
        <xsl:copy-of select="@*"/>
        <xsl:value-of select="@name"/>
      </xsl:copy>
     </xsl:template>
</xsl:stylesheet>
<Content>
    <alertHeader>
        <text xmlns="http://abc.com" xmlns:w="http://def.com"> Claim              
            <dynamicVariable name="Claim_Reference" />: More Information Needed          
        </text>
        <contactUs>false</contactUs>
    </alertHeader>
    <body>
        <text> ATM/Debit Card Claim:           
            <strong>
                <dynamicVariable name="Claim_Reference" />
            </strong>
        </text>
    </body>
</Content>
<Content>
   <alertHeader>
      <text xmlns="http://abc.com" xmlns:w="http://def.com"> Claim
            <dynamicVariable name="Claim_Reference">Claim_Reference</dynamicVariable>: More Information Needed
        </text>
      <contactUs>false</contactUs>
   </alertHeader>
   <body>
      <text> ATM/Debit Card Claim:
            <strong>
            <dynamicVariable name="Claim_Reference">Claim_Reference</dynamicVariable>
         </strong>
      </text>
   </body>
</Content>

按原样复制每个节点

  • 单个模板将覆盖标识模板。它匹配名称为“
    dynamicVariable
    ”的任何对象,而不考虑名称空间,并且该对象是
    strong
    的子对象(因此,指定更多上下文有助于我们仅处理
    dynamicVariable
    的这一事件,但保留前一个“原样”)

  • 覆盖的tempalte shallo复制当前节点,然后复制其属性,最后创建一个文本节点子节点,其内容是当前(匹配)元素的
    name
    属性的字符串值


  • 它满足了您的标准,并且当您发布完整xsl样式表的See Dimitre答案时,输出结果是,他使用了与我相同的模板体。谢谢。但我希望对每个动态变量标记都执行相同的操作(无论它们在文档中的何处,并且对“name”属性具有不同的属性值)。您能将相关代码发布到它吗?您发布的代码对第一个“dynamicVariable”标记也不起作用。@Jeevan:那么,您想对
    alertHeader
    下的
    dynamicVariable
    也这样做吗?请确认。如果是这样,现有的文本节点子节点应该被替换,还是也应该保留?@Jeevan:我更新了我的答案--转换现在对每个
    dynamicVariable
    元素进行所需的处理。@Jeevan:我很高兴“代码很好”。如果是,请您接受答案(通过单击答案旁边的复选标记)?