根据 XSLT 中是否存在节点将节点值分配给变量



我正在尝试根据XML中是否存在一个节点或将分配另一个节点的值将一个变量的值分配给另一个变量。我知道两个节点的Xpaths.请在下面找到 XSL 代码的一部分:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="partMetaOriginal" select="book-part-wrapper/book-part[@book-part-type='chapter']/book-part-meta"/>  
<xsl:variable name="person" select="book-part-wrapper/book-part[@book-part-type='part']/body/book-part[@book-part-type='chapter']/book-part-meta"/> 
<xsl:variable name="partMeta"> 
<xsl:if test="book-part-wrapper/book-part[@book-part-type='part']">
<xsl:value-of select="$person"/>
</xsl:if>
</xsl:variable> 

在我的 XSL 的其余部分使用变量">partMeta"的值时,我收到以下错误:

ERROR:  'Could not compile stylesheet'
FATAL ERROR:  'Could not compile stylesheet'
:Error checking type of the expression 'FilterParentPath(variable-ref(partMeta/result-tree), step("child", 48))'.
javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:865)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:649)
at com.molcon.xmlToXSLT.XMLTransform.main(XMLTransform.java:21)
Caused by: Error checking type of the expression 'FilterParentPath(variable-ref(partMeta/result-tree), step("child", 48))'.

Java 版本 - 1.6

PS:我需要一段代码,它可以为我的变量 partMeta 分配适当的节点值,基于的条件只不过是属性">book-part-wrapper/book-part[@book-part-type]"的值。因此,如果值是"章节",则变量获取变量"partMetaOriginal"的值,否则它将获得变量"person"的值。此变量用于导航到其他子节点。

下面的代码应该可以工作,不确定这是否是你真正想要的。此外,如果要测试属性 book-part-type,正确的 xpath 将是 book-part-wrapper/book-part/@book-part-type。您只需要在代码上更改它。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="partMetaOriginal" select="book-part-wrapper/book-part[@book-part-type='chapter']/book-part-meta"/>  
<xsl:variable name="person" select="book-part-wrapper/book-part[@book-part-type='part']/body/book-part[@book-part-type='chapter']/book-part-meta"/> 
<xsl:variable name="partMeta">
<xsl:choose>
<xsl:when test="book-part-wrapper/book-part[@book-part-type] = 'chapter'">
<xsl:value-of select="$partMetaOriginal"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$person"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>

</xsl:stylesheet>

相关内容

  • 没有找到相关文章

最新更新