Xml XSLT更改模式的结构
我是XSLT新手,希望使用XSLT1.0或XSLT2.0更改模式 源XML:Xml XSLT更改模式的结构,xml,xslt,xsd,xslt-1.0,xslt-2.0,Xml,Xslt,Xsd,Xslt 1.0,Xslt 2.0,我是XSLT新手,希望使用XSLT1.0或XSLT2.0更改模式 源XML: <ABC> <AB> <A> <String>123</String> <Valid>true</Valid> </A> <B> <String/> <Valid>false</Valid>
<ABC>
<AB>
<A>
<String>123</String>
<Valid>true</Valid>
</A>
<B>
<String/>
<Valid>false</Valid>
</B>
<C>
<Int64>12345</Int64>
<Valid>true</Valid>
</C>
<D>
<String>1234567</String>
<Valid>true</Valid>
</D>
</AB>
123
符合事实的
错误的
12345
符合事实的
1234567
符合事实的
"
目标XML:
<ABC>
<AB>
<A>123></A>
</B>
<C>12345</C>
<D>1234567</D>
</AB>
</ABC>
123>
12345
1234567
请注意:
是一个重复元素。请帮我解决这个问题
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<ABC>
<AB>
<A><xsl:value-of select="String"/></A>
<B><xsl:value-of select="String"/></B>
<C><xsl:value-of select="Int64"/></C>
</AB>
</ABC>
</xsl:template>
</xsl:stylesheet>
这是我编写的示例XSLT。它可以创建模式,但不能插入值如果您有一个XML->XML转换,其中要保留部分结构和节点,那么您通常使用标识转换开始编写转换,在XSLT 3中,您可以通过声明,在早期版本中,您可以使用模板将其拼写出来
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
这是一个在线示例
当然,根据您的需要或确切要求,您可以编写其他或更具体的模板,例如
<xsl:template match="AB/C">
<xsl:copy>
<xsl:value-of select="Int64"/>
</xsl:copy>
</xsl:template>
这不太难。实际上,您无法打印这些值。您可以选择以下代码:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AB">
<AB>
<xsl:for-each select="*">
<xsl:copy>
<xsl:value-of select="*[1]"/>
</xsl:copy>
</xsl:for-each>
</AB>
</xsl:template>
</xsl:stylesheet>
您认为“67”来自哪里?对不起,这是输入中的一个输入错误。。值为“1234567”,您至少应该提供一个伪算法来理解从输入到输出xml的过程。请阅读并提出正确的问题。Thanks@baptistemm对不起,要求是。。我得到的是XML字符串中的源XML,为了映射到下游系统,我需要将源XML转换为目标XML以进行映射。我知道这不是代码编写服务。我所问的只是建议或方法。不完全是XSLT。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AB">
<AB>
<xsl:for-each select="*">
<xsl:copy>
<xsl:value-of select="*[1]"/>
</xsl:copy>
</xsl:for-each>
</AB>
</xsl:template>
</xsl:stylesheet>