我是XSLT的新手。
我有一个XML -
<root>
<fiberList>
<fiber>
<A>abcd</A>
<B>bcde</B>
<C>cdef</C>
</fiber>
</fiberList>
<generatorList>
<generator>
<D>defg</D>
<E>efgh</E>
</generator>
</root>
我想通过XSL将这个XML转换为另一个XML。 生成的XML应该是这样的 -
<parent>
<child>
<M>abcd</M>
<N>bcde</N>
<O>efgh</O>
</child>
</parent>
但是我在转换后得到以下XML -
<parent>
<child>
<M>abcd</M>
<N>bcde</N>
<O/>
</child>
</parent>
我的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>
请帮忙。
答案 0 :(得分:0)
我还没试过......但我想 一个领先的&#39; /&#39;在这里遗失:
<xsl:value-of select="root/generatorList/generator/E"/>
请试试这个:
<xsl:value-of select="/root/generatorList/generator/E"/>
否则xslt引擎正在尝试查找相对路径 &#34;根/ generatorList /发电机/ E &#34;从匹配的开始 模板的元素(/ root / fiberList / fiber)但没有 /根/ fiberList /纤维/根/ generatorList /发电机/ E
答案 1 :(得分:0)
作为替代方案,您也可以使用此样式表:
<强> XSLT-1.0 强>:
allowed_tags = ['img']
allowed_attrs = {'img':['src','alt']};
target.body_html = bleach.linkify(bleach.clean(markdown(value,output_format='html'),tags=allowed_tags,attributes=allowed_attrs,strip=True));
修改强>
在 XSLT-2.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>
指令简化为以下内容:
xsl:apply-templates