首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组解析和与XML节点中值的匹配(XSLT1.0)

数组解析和与XML节点中值的匹配(XSLT1.0)
EN

Stack Overflow用户
提问于 2022-07-13 21:49:12
回答 1查看 33关注 0票数 0

请允许我在此提出我目前遇到的一个问题:

我有两份文件:

  1. 文件,包含表示操作(历史)
  2. 的标记的XML文件,用于特定操作的特定标签文件(两个文件之间的公共标记是操作引用)

我将标签文件加载到xslt中,并遍历数组来构建输出。我做了一个测试,以了解是否在标签文件中找到了当前节点的引用,因此我恢复位于文件中的标签以供显示。下面是我的代码(循环部分):

代码语言:javascript
运行
复制
<xsl:variable name="file-extrait-labels" select="'../../../../../../../../Ressources-bank/xml-xsl/EXTRAIT-10765280004-01102021-31122021.xml'" />
<xsl:variable name="table-extrait-labels" select="document($file-extrait-labels)/transactions-reals-labels" />
<table-movement struct="table">         
     <xsl:for-each select="/ACCOUNT_EXTRACTION/MOVEMENT">
        <ligne struct="row">
            <mvt.date><xsl:value-of select="normalize-space (@MOVEMENT_DATE)" /></mvt.date>
            <mvt.ref><xsl:value-of select="normalize-space (@MOVEMENT_ACCOUNTING_RECORD)" /></mvt.ref>
 
            <xsl:choose>
                <xsl:when test="$table-extrait-labels/transaction[reference = @MOVEMENT_ACCOUNTING_RECORD]">
                    <mvt.lib>
                       <xsl:value-of select="normalize-space ($table-extrait-labels/transaction[reference = @MOVEMENT_ACCOUNTING_RECORD]/label)"/>
                    </mvt.lib>
                </xsl:when>
 
                <xsl:otherwise>
                    <mvt.lib><xsl:value-of select="normalize-space (@MOVEMENT_DESCRIPTION)" /></mvt.lib>
                    <xsl:choose>
                        <xsl:when test="LABELS">
                            <mvt.label><xsl:value-of select="concat(' - ', normalize-space (LABELS[1]/@LABEL))" /></mvt.label>
                        </xsl:when>
                        <xsl:otherwise>
                            <mvt.label><xsl:value-of select="''" /></mvt.label>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:otherwise>                
            </xsl:choose>
        </ligne>
     </xsl:for-each>
</table-movement>

问题是,尽管标签文件中确实存在引用,但它还是不起作用。非常感谢你的帮助。

事务xml文件的一部分:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<ACCOUNT_EXTRACTION>
    <MOVEMENT MOVEMENT_DESCRIPTION="TENUE COMPTE / FOND GARANTIE R" MOVEMENT_ACCOUNTING_RECORD="AG452032" MOVEMENT_DATE="01/11/2021" ACCOUNTING_DATE="29/10/2021" MOVEMENT_AMOUNT="6000,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="TAXE FRAIS FIXE AU 31/10/21" MOVEMENT_ACCOUNTING_RECORD="AG452032" MOVEMENT_DATE="01/11/2021" ACCOUNTING_DATE="29/10/2021" MOVEMENT_AMOUNT="1134,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="INTERETS DEBITEURS AU 31/10/21" MOVEMENT_ACCOUNTING_RECORD="AG452032" MOVEMENT_DATE="01/11/2021" ACCOUNTING_DATE="29/10/2021" MOVEMENT_AMOUNT="149,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="TAXE/INTERETS DBT AU 31/10/21" MOVEMENT_ACCOUNTING_RECORD="AG452032" MOVEMENT_DATE="01/11/2021" ACCOUNTING_DATE="29/10/2021" MOVEMENT_AMOUNT="28,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="COMM. DE DECOUVERT AU 31/10/21" MOVEMENT_ACCOUNTING_RECORD="AG452032" MOVEMENT_DATE="01/11/2021" ACCOUNTING_DATE="29/10/2021" MOVEMENT_AMOUNT="13,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="TX/COM. DECOUVERT AU 31/10/21" MOVEMENT_ACCOUNTING_RECORD="AG452032" MOVEMENT_DATE="01/11/2021" ACCOUNTING_DATE="29/10/2021" MOVEMENT_AMOUNT="2,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="VERSEMENT          APPRO COMP" MOVEMENT_ACCOUNTING_RECORD="VE001302150" MOVEMENT_DATE="02/11/2021" ACCOUNTING_DATE="01/11/2021" MOVEMENT_AMOUNT="470000,0000" MOVEMENT_SIDE="C"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="RET DEPLAC" MOVEMENT_ACCOUNTING_RECORD="RA424988" MOVEMENT_DATE="02/11/2021" ACCOUNTING_DATE="03/11/2021" MOVEMENT_AMOUNT="200000,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="RET DAB ON US 130689454025" MOVEMENT_ACCOUNTING_RECORD="RETMO625051" MOVEMENT_DATE="02/11/2021" ACCOUNTING_DATE="03/11/2021" MOVEMENT_AMOUNT="150000,0000" MOVEMENT_SIDE="D">
      <LABELS LABEL_ID="1" LABEL="10000014 - 2021/11/0222:07:34                               "/>
      <LABELS LABEL_ID="2" LABEL="130689454025                                                "/>
    </MOVEMENT>
    <MOVEMENT MOVEMENT_DESCRIPTION="RET DAB ON US 130689501027" MOVEMENT_ACCOUNTING_RECORD="RETMO625339" MOVEMENT_DATE="02/11/2021" ACCOUNTING_DATE="03/11/2021" MOVEMENT_AMOUNT="100000,0000" MOVEMENT_SIDE="D">
      <LABELS LABEL_ID="1" LABEL="10000014 - 2021/11/0222:08:21                               "/>
      <LABELS LABEL_ID="2" LABEL="130689501027                                                "/>
    </MOVEMENT>
    <MOVEMENT MOVEMENT_DESCRIPTION="TENUE COMPTE / FOND GARANTIE R" MOVEMENT_ACCOUNTING_RECORD="AG526044" MOVEMENT_DATE="01/12/2021" ACCOUNTING_DATE="30/11/2021" MOVEMENT_AMOUNT="6000,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="TAXE FRAIS FIXE AU 30/11/21" MOVEMENT_ACCOUNTING_RECORD="AG526044" MOVEMENT_DATE="01/12/2021" ACCOUNTING_DATE="30/11/2021" MOVEMENT_AMOUNT="1134,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="COMMISSION DE CPTE AU 30/11/21" MOVEMENT_ACCOUNTING_RECORD="AG526044" MOVEMENT_DATE="01/12/2021" ACCOUNTING_DATE="30/11/2021" MOVEMENT_AMOUNT="158,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="TAXE COMM. DE CPTE AU 30/11/21" MOVEMENT_ACCOUNTING_RECORD="AG526044" MOVEMENT_DATE="01/12/2021" ACCOUNTING_DATE="30/11/2021" MOVEMENT_AMOUNT="30,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="COMM. DE DECOUVERT AU 30/11/21" MOVEMENT_ACCOUNTING_RECORD="AG526044" MOVEMENT_DATE="01/12/2021" ACCOUNTING_DATE="30/11/2021" MOVEMENT_AMOUNT="21,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="INTERETS DEBITEURS AU 30/11/21" MOVEMENT_ACCOUNTING_RECORD="AG526044" MOVEMENT_DATE="01/12/2021" ACCOUNTING_DATE="30/11/2021" MOVEMENT_AMOUNT="8,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="TX/COM. DECOUVERT AU 30/11/21" MOVEMENT_ACCOUNTING_RECORD="AG526044" MOVEMENT_DATE="01/12/2021" ACCOUNTING_DATE="30/11/2021" MOVEMENT_AMOUNT="4,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="TAXE/INTERETS DBT AU 30/11/21" MOVEMENT_ACCOUNTING_RECORD="AG526044" MOVEMENT_DATE="01/12/2021" ACCOUNTING_DATE="30/11/2021" MOVEMENT_AMOUNT="2,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="TENUE COMPTE / FOND GARANTIE R" MOVEMENT_ACCOUNTING_RECORD="AG634388" MOVEMENT_DATE="01/01/2022" ACCOUNTING_DATE="31/12/2021" MOVEMENT_AMOUNT="6000,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="TAXE FRAIS FIXE AU 31/12/21" MOVEMENT_ACCOUNTING_RECORD="AG634388" MOVEMENT_DATE="01/01/2022" ACCOUNTING_DATE="31/12/2021" MOVEMENT_AMOUNT="1134,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="INTERETS DEBITEURS AU 31/12/21" MOVEMENT_ACCOUNTING_RECORD="AG634388" MOVEMENT_DATE="01/01/2022" ACCOUNTING_DATE="31/12/2021" MOVEMENT_AMOUNT="80,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="TAXE/INTERETS DBT AU 31/12/21" MOVEMENT_ACCOUNTING_RECORD="AG634388" MOVEMENT_DATE="01/01/2022" ACCOUNTING_DATE="31/12/2021" MOVEMENT_AMOUNT="15,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="COMM. DE DECOUVERT AU 31/12/21" MOVEMENT_ACCOUNTING_RECORD="AG634388" MOVEMENT_DATE="01/01/2022" ACCOUNTING_DATE="31/12/2021" MOVEMENT_AMOUNT="7,0000" MOVEMENT_SIDE="D"/>
    <MOVEMENT MOVEMENT_DESCRIPTION="TX/COM. DECOUVERT AU 31/12/21" MOVEMENT_ACCOUNTING_RECORD="AG634388" MOVEMENT_DATE="01/01/2022" ACCOUNTING_DATE="31/12/2021" MOVEMENT_AMOUNT="1,0000" MOVEMENT_SIDE="D"/>
</ACCOUNT_EXTRACTION>

标签xml文件的一部分:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<transactions-reals-labels>
    <transaction>
        <reference>VE001302150</reference>
        <label>Operation Match label 1</label>
    </transaction>
    <transaction>
        <reference>RETMO625051</reference>
        <label>Operation Match label 2</label>
    </transaction>
    <transaction>
        <reference>RETMO625339</reference>
        <label>Operation Match label 3</label>
    </transaction>
</transactions-reals-labels>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-13 22:52:33

你的表情:

代码语言:javascript
运行
复制
$table-extrait-labels/transaction[reference = @MOVEMENT_ACCOUNTING_RECORD]

正在寻找一个具有子transactionreferenceMOVEMENT_ACCOUNTING_RECORD属性,该属性的值彼此相等。

如果您想找到一个transaction,其子reference值等于context节点的MOVEMENT_ACCOUNTING_RECORD属性的值(在您的示例中是当前处理的MOVEMENT),则需要使用:

代码语言:javascript
运行
复制
$table-extrait-labels/transaction[reference = current()/@MOVEMENT_ACCOUNTING_RECORD]

或者(最好)构造一个并使用它,如我在注释中提到的示例所示。

未经检验,因为没有提供可重复的例子。

还请注意,如果使用变量而不是重复XPath表达式,那么测试节点的存在,然后从该节点获取数据将更有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72972988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档