Xslt xml文件的xsl实现
需要转换具有标记(dynamicVariable)且具有属性(name)的xml文件。必须使用xsl将此xml文件转换为相同的xml文件,以便标记(dynamicVariable)应具有相同的结构,并且标记内容也应为属性的值 需要转换下面的xml文件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
<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:我很高兴“代码很好”。如果是,请您接受答案(通过单击答案旁边的复选标记)?