我有一个XML,在XML中我有一个元素,它本身有几个元素,现在我想要的是复制每一个并更改标记名称。
XML结构:
<mothertag>
<atag>
asdfasdfa
</atag>
<storybody>
<p>sometext here<URI ref="http://google.com" /> some more text</p>
</storybody>
</mothertag>
<storybody>
更改为<body>
,<URI>
更改为<a>
我正在为文档的其余部分做的是定义模板并逐个应用。现在我遇到了这个需要复制的东西,只需更改一些,名称也改变了。
答案 0 :(得分:0)
要在XSLT中执行此操作,您只需要一个基本的身份转换,<storybody>
元素除外。
这样的事情:
<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="storybody">
<body>
<xsl:apply-templates select="@*|node()"/>
</body>
</xsl:template>
</xsl:stylesheet>
修改强>
我已阅读您的评论&#34;我不想使用身份转换。相反,我需要对文档中的一个元素使用身份转换&#34; ,并且不清楚您需要什么。也许您对文档的其余部分进行了转换,但是这个元素有问题吗?在这种情况下,除了你已经写好的内容之外,你应该只使用我答案中的第二个模板。
你邮件的第二部分在标记中部分丢失,但现在已经修复,我忽略了它。要将<URI>
元素更改为<a>
,您还应添加其他模板。假设您要将原始ref
属性更改为href
,则两者一起显示为
<xsl:template match="storybody">
<body>
<xsl:apply-templates select="@*|node()"/>
</body>
</xsl:template>
<xsl:template match="storybody//URI">
<a>
<xsl:attribute name="href">
<xsl:value-of select="@ref" />
</xsl:attribute>
</a>
</xsl:template>
如果您的意图与此不同,请澄清,我们会进一步帮助您。
答案 1 :(得分:0)
目前还不清楚你想要做什么Touseef而没有你想要的结果XML的例子但是....
如果您需要丢弃大部分输入文档并保留一个标记,那么这种模式可能有所帮助:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="storybody">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
我没有在我输入XSLT引擎的机器前面,所以我没有测试过这个。但是我的想法是将所有内容与第一个模板匹配,然后忽略它,除了我们只是复制到输出文档的storybody元素。
如果这没有帮助,那么我建议您提供一份所需的结果XML文档样本以及您希望应用的规则的明确声明