每个文本的 XSL 都以变量中的选择开头

问题描述 投票:0回答:1

我的输入中有这个 XML:

 <root> RH03051CDSIA280524CM1490301951171                                                                                      
 610000001                  93001                  G0305101700000000004575EUR270524C000000000000,00IT44                 
 620000001001270524270524D000000000649,3450TE                ITDA00DPN145                                               
 630000001001HAYS SRL/AVIS BUDGET ITALIA S.P.A./AR885265/2355070853/B2B/RCUR/OE5OA5200P4907R3                           
 640000001EUR270524C000000000000,00                                                                                     
 EF03051CDSIA280524CM1490301951171           0000001                              0000006                               
 RH03051CDSIA280524CM1490301951349                                                                                      
 610000001                  93001                  Z0305101699000078389249USD270524C000000001320,97IT72                 
 640000001USD270524C000000001320,97                                                                                     
 EF03051CDSIA280524CM1490301951349           0000001                              0000004                               
</root>

我想迭代每个以“RH”开头的字符串来解析整个多行字符串。例如,在我的 xml 输入中,我有 2 个以 RH 开头的字符串:

  1. RH03051CDSIA280524CM1490301951171 ....
  2. RH03051CDSIA280524CM1490301951349 ....

我的xslt是这样的:

    <xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:exsl="http://exslt.org/common"
                xmlns:ns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.03"
                xmlns:BODY="urn:CBI:xsd:CBIBdyBkToCstmrStmtReq.00.01.02"
                xmlns:LMSG="urn:CBI:xsd:CBIBkToCstmrStmtReqLogMsg.00.01.02"
                xmlns:HE2E="urn:CBI:xsd:CBIHdrSrv.001.07"
                xmlns:HTRT="urn:CBI:xsd:CBIHdrTrt.001.07"
                xmlns:IDST="urn:CBI:xsd:CBIIdyStmtReqLogMsg.00.01.02"
                xmlns:DLST="urn:CBI:xsd:CBIDlyStmtReqLogMsg.00.01.02"
                xmlns:PRST="urn:CBI:xsd:CBIPrdcStmtReqLogMsg.00.01.02"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:str="http://exslt.org/strings"
                xmlns:myns="py_ns"
                extension-element-prefixes="exsl myns"
                exclude-result-prefixes="exsl ns">


    <xsl:output encoding="UTF-8" standalone="yes" indent="yes" method="xml" />

    <xsl:template match="/">
                
        <xsl:for-each select="//text[starts-with(., ' RH')]">
            <xsl:value-of select="." />
            
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

但是当我这样做时:

<xsl:for-each select="//text[starts-with(., ' RH')]">
<xsl:value-of select="." />

我什么也没看到。 我的代码正确吗? 相同的提示? 谢谢 问候

python xml xslt transform
1个回答
0
投票

文本位于单个文本节点中,该节点是根元素的子元素;在 XSLT 3 中你可以使用例如

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="3.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="#all"
  expand-text="yes">

  <xsl:output method="text"/>

  <xsl:template match="/" name="xsl:initial-template">
    <xsl:value-of select="tokenize(root, '\n')[starts-with(., ' RH')]" separator="&#10;"/>
  </xsl:template>

</xsl:stylesheet>

输出是例如

 RH03051CDSIA280524CM1490301951171                                                                                      
 RH03051CDSIA280524CM1490301951349  

XSLT 3 可以使用 saxonche 包与 Python 一起使用。`

© www.soinside.com 2019 - 2024. All rights reserved.