从XML的不同部分选择XSL中的数据
我是XSLT新手 我有一个XML-从XML的不同部分选择XSL中的数据,xml,xslt,Xml,Xslt,我是XSLT新手 我有一个XML- <root> <fiberList> <fiber> <A>abcd</A> <B>bcde</B> <C>cdef</C> </fiber> &l
<root>
<fiberList>
<fiber>
<A>abcd</A>
<B>bcde</B>
<C>cdef</C>
</fiber>
</fiberList>
<generatorList>
<generator>
<D>defg</D>
<E>efgh</E>
</generator>
</root>
abcd
bcde
cdef
德福
efgh
我想通过XSL将这个XML转换成另一个XML。
生成的XML应该是这样的-
<parent>
<child>
<M>abcd</M>
<N>bcde</N>
<O>efgh</O>
</child>
</parent>
abcd
bcde
efgh
但我在转换后得到了以下XML-
<parent>
<child>
<M>abcd</M>
<N>bcde</N>
<O/>
</child>
</parent>
abcd
bcde
我的XSL如下-
<xsl:template match="/">
<xsl:element name="parent">
<xsl:apply-templates select="root/fiberList/fiber"/>
</xsl:element>
</xsl:template>
<xsl:template match="root/fiberList/fiber">
<xsl:element name="child">
<xsl:element name="M">
<xsl:value-of select="A"/>
</element>
<xsl:element name="N">
<xsl:value-of select="B"/>
</element>
<xsl:element name="O">
<xsl:value-of select="root/generatorList/generator/E"/>
</element>
</element>
</template>
</stylesheet>
请帮忙。我还没试过。。但我认为 此处缺少前导“/”:
<xsl:value-of select="root/generatorList/generator/E"/>
请试试这个:
<xsl:value-of select="/root/generatorList/generator/E"/>
否则,xslt引擎将试图找到相对路径
“根/生成器列表/生成器/E”从匹配的
模板的元素(/root/fiberList/fiber),但没有
/root/fiberList/fiber/root/generatorList/generator/E.我还没试过。。但我认为 此处缺少前导“/”:
<xsl:value-of select="root/generatorList/generator/E"/>
请试试这个:
<xsl:value-of select="/root/generatorList/generator/E"/>
否则,xslt引擎将试图找到相对路径
“根/生成器列表/生成器/E”从匹配的
模板的元素(/root/fiberList/fiber),但没有
/root/fiberList/fiber/root/generatorList/generator/E.您也可以使用此样式表: XSLT-1.0:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/root">
<parent>
<child>
<xsl:apply-templates select="fiberList/fiber/A | fiberList/fiber/B | generatorList/generator/E"/>
</child>
</parent>
</xsl:template>
<xsl:template match="A">
<M>
<xsl:value-of select="."/>
</M>
</xsl:template>
<xsl:template match="B">
<N>
<xsl:value-of select="."/>
</N>
</xsl:template>
<xsl:template match="E">
<O>
<xsl:value-of select="."/>
</O>
</xsl:template>
</xsl:stylesheet>
作为替代,您也可以使用此样式表: XSLT-1.0:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/root">
<parent>
<child>
<xsl:apply-templates select="fiberList/fiber/A | fiberList/fiber/B | generatorList/generator/E"/>
</child>
</parent>
</xsl:template>
<xsl:template match="A">
<M>
<xsl:value-of select="."/>
</M>
</xsl:template>
<xsl:template match="B">
<N>
<xsl:value-of select="."/>
</N>
</xsl:template>
<xsl:template match="E">
<O>
<xsl:value-of select="."/>
</O>
</xsl:template>
</xsl:stylesheet>
您使用的XSLT版本是什么?请将示例更正为有效的XMLs。您使用的XSLT版本是什么?请将示例更正为有效的XMLs。您使用的XSLT版本是什么?请将样本更正为有效的XMLs。