xml - XSLT 和 XML 生成中的串联
问题描述
我有一个 XSLT,它有几个变量名,例如 pathFile、nameFile、fullPath。
这是我的输入 XML:
<?xml version="1.0" encoding="utf-8"?>
<DOCUMENT>
<EXTERNALFILES />
<OCRTEXTFILES />
<DOCUMENTINDEX Name="val1">val1</DOCUMENTINDEX>
<DOCUMENTINDEX Name="val2">val2</DOCUMENTINDEX>
<INSTANCEVALUE Name="InstanceID">instancevalue</KOFAXVALUE>
<PATHFILE Sequence="17">C:\myfolder\</TEXTCONSTANT>
</DOCUMENT>
我从 XML 值接收为 PATHFILE(值为“C:\myfolder\”)和 INSTANCEVALUE(值为“instancevalue”)我的目标是连接 pathFile 和 nameFile 并返回生成的 XML 中的完整路径。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"
indent="yes" omit-xml-declaration="no" encoding="UTF-8" />
<xsl:template match="/">
<ImportDocument DocType="I"
xmlns="http://KOFAX_ERT/KOFAX_SAP_DocumentSchema.xsd">
<xsl:for-each select="DOCUMENT">
<xsl:for-each select="./DOCUMENTINDEX">
<DOCUMENTINDEX Name="{@Name}">
<xsl:value-of select="text()"/>
</DOCUMENTINDEX>
</xsl:for-each>
<xsl:variable name="pathFile" select="substring-before(./PATHFILE[@Sequence='17'],'.')"/>
<xsl:variable name="nameFile" select="substring-before(./INSTANCEVALUE[@Name='InstanceID'],'.')"/>
<xsl:variable name="fullPath" select="concat($pathFile,$nameFile)"/>
<Attachments>
<Attachment>
<FullPath>
<xsl:value-of select="concat($fullPath,'_signed.pdf')"/>
</FullPath>
</Attachment>
</Attachments>
</xsl:for-each>
</ImportDocument>
</xsl:template>
</xsl:stylesheet>
我希望有这个结果:
<DOCUMENTINDEX Name="val1">val1</DOCUMENTINDEX>
<DOCUMENTINDEX Name="val2">val2</DOCUMENTINDEX>
<Attachments>
<Attachment>
<FullPath>C:\myfolder\instancevalue_signed.pdf</FullPath>
</Attachment>
</Attachments>
不幸的是,它没有返回预期的输出。我得到的结果如下:
<DOCUMENTINDEX Name="val1">val1</DOCUMENTINDEX>
<DOCUMENTINDEX Name="val2">val2</DOCUMENTINDEX>
<Attachments>
<Attachment>
<FullPath>_signed.pdf</FullPath>
</Attachment>
</Attachments>
解决方案
我终于解决了我的问题。我正在使用合作者代码。
- 我之前删除了子字符串,
- 我直接使用了select值,最后concat
- 我把 xsl:variable 标签放在附件中
<Attachments>
<Attachment>
<xsl:variable name="pathFile" select="PATHFILE[@Sequence='17']"/>
<xsl:variable name="extension" select="PATHFILE[@Sequence='19']"/>
<xsl:variable name="nameFile" select="INSTANCEVALUE[@Name='InstanceID']"/>
<FullPath>
<xsl:value-of select="concat($pathFile, $nameFile, $extension)"/>
</FullPath>
</Attachment>
</Attachments>
推荐阅读
- django - 如何将 Django 3 中的 mp4 视频流式传输到 Vue.js
- python - UnicodeDecodeError:“utf-8”编解码器无法解码位置 359 中的字节 0x92:无效的起始字节
- javascript - 错误计算getHours的日期之间的差异?
- php - MySQL连接多个列(所有列都包含相同的整数范围)
- java - Spring Boot 看不到 Aspect 的
- javascript - 使用 javascript 从浏览器页面获取当前显示的图像
- python-3.x - 语法错误:python 3.8
- active-directory - 访问 AD 属性的系统
- c# - 如何在 .NET Core 3.1 中用 C# 检索域用户的所有本地组?
- python-3.x - KivyMD 中 MDDropdownMenu 中的定位错误