java - 根据xslt中节点的存在与否将节点值分配给变量
问题描述
我正在尝试根据 XML 中是否存在节点将一个变量的值分配给另一个变量,否则将分配另一个节点的值。我知道两个节点的 Xpath。请在下面找到部分 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:我需要一个代码,它可以根据属性' book-part-wrapper/book-part[@book-part-type] '的值的条件为我的变量 partMeta 分配适当的节点值。所以如果值为'chapter',则变量获取变量'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>
推荐阅读
- javascript - 如何在 React useEffect 中使用函数
- python-3.x - 来自客户端的 Djanog 应用程序快速书授权页面
- python - 如何在 Python 中创建设计矩阵?
- entity-framework-core - 实体框架:具有大量数据的缓慢迁移
- heroku - Heroku 应用程序已部署但无法运行,并且出现错误
- react-native - 如何在 React Native 中重新播放 Lottie 动画
- php - MySQL 字段看似随机更新
- javascript - 在 Tabulator 4.9 中使用 setColumns 函数时缺少格式化程序
- laravel - 让 Foundation 使用 Laravel - 没有 SCSS 文件夹
- android - 高端 iOS 和 Android 手机的 BLE 扫描时间