首页 > 解决方案 > 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>

标签: xmlxslt

解决方案


我终于解决了我的问题。我正在使用合作者代码。

  1. 我之前删除了子字符串,
  2. 我直接使用了select值,最后concat
  3. 我把 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>


推荐阅读