草庐IT

xml - XSLT - XML 转换和删除空标记

coder 2024-07-01 原文

在一个 XSLT 文件中,我需要转换 XML 并删除生成的 XML 上的空标记。

我正在尝试向我的 XSLT 代码添加额外的模板以删除空元素。使用 XSLT 1.0,我发现我需要使用 mode 属性来首先执行转换,然后通过将初始结果存储在变量中来从中删除空标记。

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ext="http://exslt.org/common">
<xsl:strip-space elements="*" />
<xsl:output indent="yes" />

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="node()|@*" mode="mPass2">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*" mode="mPass2"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="/">
    <xsl:variable name="vrtfPass1Result">
        <xsl:apply-templates/>
</xsl:variable>

<xsl:apply-templates mode="mPass2"
    select="ext:node-set($vrtfPass1Result)/*"/>
</xsl:template>

<xsl:template match="/Root/Element">
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:DRAFT1auth.052.001.01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:DRAFT1auth.052.001.01 file://LON-SLFILE04/MDingle$/My%20Documents/SFTR/Schema/DRAFT_SFTR_documentation/DRAFT1auth.052.001.01.xsd">
    <SctiesFincgRptgTxRpt>
        <TradData>
            <New>
                <TechRcrdId>a</TechRcrdId>
                <CtrPtyData>
                    <RptgDtTm><xsl:value-of select="@Reporting_timestamp" /></RptgDtTm>
                    <RptSubmitgNtty><xsl:value-of select="@Report_submitting_entity" /></RptSubmitgNtty>
                    <CtrPtyData>
                        <RptgCtrPty>
                            <Id>
                                <LEI><xsl:value-of select="@Reporting_counterparty" /></LEI>
                            </Id>
                            <Ntr>
                                <xsl:if test="@Nature_of_the_reporting_counterparty = 'N'" >
                                    <NFI><xsl:value-of select="@Nature_of_the_reporting_counterparty" /></NFI>
                                </xsl:if>
                                <FI>
                                    <xsl:if test="@Nature_of_the_reporting_counterparty = 'F'" >
                                        <xsl:value-of select="@Nature_of_the_reporting_counterparty" />
                                    </xsl:if>
                                    <Clssfctn><xsl:value-of select="@Sector_of_the_reporting_counterparty" /></Clssfctn>
                                    <InvstmtFndClssfctn><xsl:value-of select="@Additional_sector_classification" /></InvstmtFndClssfctn>
                                </FI>
                            </Ntr>
                            <Brnch>
                                <Id>
                                    <xsl:if test="string-length(Branch_of_the_reporting_counterparty) &gt; 3" >
                                        <LE><xsl:value-of select="@Branch_of_the_reporting_counterparty" /></LE>
                                    </xsl:if>
                                    <xsl:if test="string-length(Branch_of_the_reporting_counterparty) &lt; 3" >
                                        <Ctry><xsl:value-of select="@Branch_of_the_reporting_counterparty" /></Ctry>
                                    </xsl:if>
                                </Id>
                            </Brnch>
                            <Sd><xsl:value-of select="@Counterparty_side" /></Sd>
                        </RptgCtrPty>
                        <OthrCtrPty>
                            <Id>
                                <xsl:if test="string-length(Branch_of_the_other_counterparty) &gt; 3" >
                                        <LE><xsl:value-of select="@Branch_of_the_other_counterparty" /></LE>
                                </xsl:if>
                                <xsl:if test="string-length(Other_counterparty) &lt; 21" >
                                        <LEI><xsl:value-of select="@Other_counterparty" /></LEI>
                                </xsl:if>
                                <xsl:if test="string-length(Other_counterparty) &gt; 21" >
                                        <Clntld><xsl:value-of select="@Other_counterparty" /></Clntld>
                                </xsl:if>                                   
                            </Id>
                            <xsl:if test="string-length(Branch_of_the_other_counterparty) &lt; 3" >
                                    <Ctry><xsl:value-of select="@Branch_of_the_other_counterparty" /></Ctry>
                            </xsl:if>
                            <CtryCd><xsl:value-of select="@Country_of_the_other_Counterparty" /></CtryCd>
                        </OthrCtrPty>
                        <NttyRspnsblForRpt><xsl:value-of select="@Entity_responsible_for_the_report" /></NttyRspnsblForRpt>
                        <TxCtrPtyData>
                            <RpTrad>
                                <Bnfcry><xsl:value-of select="@Beneficiary" /></Bnfcry>
                                <TrptyAgt><xsl:value-of select="@Tri-party_agent" /></TrptyAgt>
                                <Brkr><xsl:value-of select="@Broker" /></Brkr>
                                <ClrMmb><xsl:value-of select="@Clearing_member" /></ClrMmb>
                                <SttlmPties>
                                    <CntrlSctiesDpstryPtcpt><xsl:value-of select="@CSD_participant_or_indirect_participant" /></CntrlSctiesDpstryPtcpt>
                                    <IndrctPtcpt><xsl:value-of select="@CSD_participant_or_indirect_participant" /></IndrctPtcpt>
                                </SttlmPties>
                                <AgtLndr><xsl:value-of select="@Agent_lender" /></AgtLndr>
                            </RpTrad>
                        </TxCtrPtyData>                         
                    </CtrPtyData>
                </CtrPtyData>
                <LnData>
                    <UnqTradIdr><xsl:value-of select="@Unique_Transaction_Identifier__x0028_UTI_x0029_" /></UnqTradIdr>
                    <EvtDt><xsl:value-of select="@Event_date" /></EvtDt>
                    <CtrctTp><xsl:value-of select="@Type_of_SFT" /></CtrctTp>
                    <ExctnDtTm><xsl:value-of select="@Execution_timestamp" /></ExctnDtTm>
                    <TxLnData>
                        <RpTrad>
                            <ClrSts>
                                <Clrd>
                                    <RptTrckgNbc><xsl:value-of select="@Report_tracking_number" /></RptTrckgNbc>
                                    <xsl:if test="@Cleared = 'true'" >
                                        <xsl:value-of select="@Cleared" />
                                    </xsl:if>
                                    <ClrDtTm><xsl:value-of select="@Clearing_timestamp" /></ClrDtTm>
                                    <CCP><xsl:value-of select="@CCP" /></CCP>
                                    <PrtflCd><xsl:value-of select="@Portfolio_code" /></PrtflCd>
                                </Clrd>
                                <xsl:if test="not(@Cleared = 'true')" >
                                    <NonClrd><xsl:value-of select="@Cleared" /></NonClrd>
                                </xsl:if>
                            </ClrSts>
                            <TradgVn><xsl:value-of select="@Trading_venue" /></TradgVn>
                            <MstrAgrmt>
                                <Tp>                                        
                                    <xsl:if test="@Master_Agreement_Type_Enumerations_Check = 'true'" >
                                        <Tp>
                                            <xsl:value-of select="@Master_agreement_type" />
                                        </Tp>
                                    </xsl:if>
                                    <xsl:if test="not(@Master_Agreement_Type_Enumerations_Check = 'true')" >
                                        <Prtry>
                                            <xsl:value-of select="@Master_agreement_type" />
                                        </Prtry>
                                    </xsl:if>                                   
                                </Tp>
                                <OthrMstrAgrmt><xsl:value-of select="@Other_master_agreement_type" /></OthrMstrAgrmt>
                                <Vrsn><xsl:value-of select="@Master_agreement_version" /></Vrsn>                                    
                            </MstrAgrmt>
                            <ValDt><xsl:value-of select="@Value_date__x0028_Start_date_x0029_" /></ValDt>
                            <MinNtcePrd><xsl:value-of select="@Minimum_notice_period" /></MinNtcePrd>
                            <EarlstCallBckDt><xsl:value-of select="@Earliest_call-back_date" /></EarlstCallBckDt>
                            <GnlColl><xsl:value-of select="@General_collateral_indicator" /></GnlColl>
                            <DlvryByVal><xsl:value-of select="@DBV_indicator" /></DlvryByVal>
                            <CollDlvryMtd><xsl:value-of select="@Method_used_to_provide_collateral" /></CollDlvryMtd>
                            <Term>
                                <Fxd>
                                    <MtrtyDt><xsl:value-of select="@Maturity_date__x0028_End_date_x0029_" /></MtrtyDt>
                                    <TermntnOptn><xsl:value-of select="@Termination_optionality" /></TermntnOptn>
                                </Fxd>
                                <Opn><xsl:value-of select="@Open_term" /></Opn>
                            </Term>
                            <IntrstRate>
                                <Fxd>
                                    <Rate><xsl:value-of select="@Fixed_rate" /></Rate>
                                    <DayCntBsis>
                                        <xsl:if test="@Day_Count_Convention_Enumerations_Check = 'true'" >
                                            <Cd><xsl:value-of select="@Day_count_convention" /></Cd>                                                
                                        </xsl:if>
                                        <xsl:if test="not(@Day_Count_Convention_Enumerations_Check = 'true')" >
                                            <Prtry><xsl:value-of select="@Day_count_convention" /></Prtry>
                                        </xsl:if>                                           
                                    </DayCntBsis>
                                </Fxd>
                                <Fltg>
                                    <RefRate>
                                        <xsl:if test="@Floating_Rate_Enumerations_Check = 'true'" >
                                            <Indx><xsl:value-of select="@Floating_rate" /></Indx>                                               
                                        </xsl:if>
                                        <xsl:if test="not(@Floating_Rate_Enumerations_Check = 'true')" >
                                            <Nm><xsl:value-of select="@Floating_rate" /></Nm>
                                        </xsl:if>
                                    </RefRate>
                                    <Term>
                                        <Unit><xsl:value-of select="@Floating_rate_reference_period_-_time_period" /></Unit>
                                        <Val><xsl:value-of select="@Floating_rate_reference_period_-_multiplier" /></Val>
                                    </Term>
                                    <PmtFrqcy>
                                        <Unit><xsl:value-of select="@Floating_rate_payment_frequency_-_time_period" /></Unit>
                                        <Val><xsl:value-of select="@Floating_rate_payment_frequency_-_multiplier" /></Val>
                                    </PmtFrqcy>
                                    <RstFrqcy>
                                        <Unit><xsl:value-of select="@Floating_rate_reset_frequency-_time_period" /></Unit>
                                        <Val><xsl:value-of select="@Floating_rate_reset_frequency_-_multiplier" /></Val>
                                    </RstFrqcy>
                                    <BsisPtSprd><xsl:value-of select="@Spread" /></BsisPtSprd>
                                    <MrgnLnAmt>
                                        <xsl:attribute name = "Ccy">
                                            <xsl:value-of select="@Margin_lending_currency" />
                                        </xsl:attribute>
                                        <xsl:value-of select="@Margin_lending_currency_amount" />                                           
                                    </MrgnLnAmt>
                                    <RateAdjstmnt>
                                        <Rate><xsl:value-of select="@Adjusted_rate" /></Rate>
                                        <AdjstmntDt><xsl:value-of select="@Rate_date" /></AdjstmntDt>
                                    </RateAdjstmnt>
                                </Fltg>
                            </IntrstRate>
                            <PrncplAmt>
                                <ValDtAmt><xsl:value-of select="@Principal_amount_on_value_date" /></ValDtAmt>
                                <MtrtyDtAmt><xsl:value-of select="@Principal_amount_on_maturity_date" /></MtrtyDtAmt>
                                <Ccy><xsl:value-of select="@Principal_amount_currency" /></Ccy>
                            </PrncplAmt>
                            <NetXpsrCollstnInd><xsl:value-of select="@Collateralisation_of_net_exposure" /></NetXpsrCollstnInd>
                        </RpTrad>
                        <SctiesLndg>
                            <AsstTp>
                                <xsl:value-of select="@Type_of_asset" />
                                <Scty>
                                    <Id><xsl:value-of select="@Security_Identifier" /></Id>
                                    <Clssfctn><xsl:value-of select="@Classification_of_a_security" /></Clssfctn>
                                    <Qty><xsl:value-of select="@Quantity_or_nominal_amount" /></Qty>
                                    <QtyOrNmnlVal>
                                        <NmnlVal>
                                            <Ccy><xsl:value-of select="@Currency_of_nominal_amount" /></Ccy>
                                        </NmnlVal>
                                    </QtyOrNmnlVal>
                                    <UnitPric>
                                        <xsl:value-of select="@Security_or_commodity_price" />
                                        <Ccy><xsl:value-of select="@Price_currency" /></Ccy>
                                    </UnitPric>
                                    <Qlty><xsl:value-of select="@Security_quality" /></Qlty>
                                    <Mtrty><xsl:value-of select="@Maturity_of_the_security" /></Mtrty>
                                    <Issr>
                                        <JursdctnCtry><xsl:value-of select="@Jurisdiction_of_the_issuer" /></JursdctnCtry>
                                        <LEI><xsl:value-of select="@LEI_of_the_issuer" /></LEI>
                                    </Issr>
                                    <Tp>
                                        <Cd><xsl:value-of select="@Security_type" /></Cd>
                                    </Tp>
                                </Scty>
                                <Cmmdty>
                                    <Qty>
                                        <UnitOfMeasr><xsl:value-of select="@Unit_of_measure" /></UnitOfMeasr>
                                    </Qty>
                                </Cmmdty>
                            </AsstTp>
                            <LnVal><xsl:value-of select="@Loan_value" /></LnVal>
                            <MktVal><xsl:value-of select="@Market_value" /></MktVal>
                            <RbtRate>
                                <Rate><xsl:value-of select="@Fixed_rebate_rate" /></Rate>
                                <FltgRbtRate>
                                    <RefRate>
                                        <Indx><xsl:value-of select="@Floating_rebate_rate" /></Indx>
                                    </RefRate>
                                    <Term>
                                        <Unit><xsl:value-of select="@Floating_rebate_rate_reference_period_-_time_period" /></Unit>
                                        <Val><xsl:value-of select="@Floating_rebate_rate_reference_period_-_multiplier" /></Val>
                                    </Term>
                                    <PmtFrqcy>
                                        <Unit><xsl:value-of select="@Floating_rebate_rate_payment_frequency_-_time_period" /></Unit>
                                        <Val><xsl:value-of select="@Floating_rebate_rate_payment_frequency_-_multiplier" /></Val>
                                    </PmtFrqcy>
                                    <RstFrqcy>
                                        <Unit><xsl:value-of select="@Floating_rebate_rate_reset_frequency-_time_period" /></Unit>
                                        <Val><xsl:value-of select="@Floating_rebate_rate_reset_frequency-_multiplier" /></Val>
                                    </RstFrqcy>
                                    <BsisPtSprd><xsl:value-of select="@Spread_of_the_rebate_rate" /></BsisPtSprd>
                                </FltgRbtRate>
                            </RbtRate>
                            <LndgFee><xsl:value-of select="@Lending_fee" /></LndgFee>
                            <ExclsvArrgmnt><xsl:value-of select="@Exclusive_arrangements" /></ExclsvArrgmnt>
                        </SctiesLndg>
                        <MrgnLndg>
                            <OutsdngMrgnLnAmt><xsl:value-of select="@Outstanding_margin_loan" /></OutsdngMrgnLnAmt>
                            <Ccy><xsl:value-of select="@Base_currency_of_outstanding_margin_loan" /></Ccy>
                            <ShrtMktValAmt><xsl:value-of select="@Short_market_value" /></ShrtMktValAmt>
                        </MrgnLndg>
                    </TxLnData>
                </LnData>
                <CollData>
                    <SctiesLndg>
                        <Uncollsd><xsl:value-of select="@Uncollateralised_SL_flag" /></Uncollsd>
                    </SctiesLndg>
                    <RpTrad>
                        <CollValDt><xsl:value-of select="@Value_date_of_the_collateral" /></CollValDt>
                        <Tp>                                
                            <xsl:value-of select="@Type_of_collateral_component" />
                            <Csh>
                                <xsl:attribute name = "Ccy">
                                    <xsl:value-of select="@Cash_collateral_currency" />
                                </xsl:attribute>
                                <xsl:value-of select="@Cash_collateral_amount" />
                            </Csh>
                            <Scties>
                                <Id>
                                    <Id><xsl:value-of select="@Identification_of_a_security_used_as_collateral" /></Id>
                                    <ClssfctnTp><xsl:value-of select="@Classification_of_a_security_used_as_collateral" /></ClssfctnTp>
                                    <QtyOrNmnlVal>
                                        <NmnlVal>
                                            <xsl:attribute name = "Ccy">
                                                <xsl:value-of select="@Currency_of_collateral_nominal_amount" />
                                            </xsl:attribute>
                                        </NmnlVal>
                                    </QtyOrNmnlVal>
                                    <HrcutOrMrgn><xsl:value-of select="@Haircut_or_margin" /></HrcutOrMrgn>
                                    <Qlty><xsl:value-of select="@Collateral_quality" /></Qlty>
                                    <Mtrty><xsl:value-of select="@Collateral_security_maturity" /></Mtrty>
                                    <Issr>
                                        <JursdctnCtry><xsl:value-of select="@Collateral_jurisdiction_of_the_issuer" /></JursdctnCtry>                                           
                                        <LEI><xsl:value-of select="@Collateral_LEI_of_the_issuer" /></LEI>
                                    </Issr>
                                    <Tp>
                                        <xsl:if test="@Collateral_Type_Enumerations_Check = 'true'" >
                                            <Cd><xsl:value-of select="@Collateral_type" /></Cd>
                                        </xsl:if>
                                        <xsl:if test="not(@Collateral_Type_Enumerations_Check = 'true')" >
                                            <Prtry><xsl:value-of select="@Collateral_type" /></Prtry>
                                        </xsl:if>
                                    </Tp>
                                    <AvlblForCollReuse><xsl:value-of select="@Availability_for_collateral_reuse" /></AvlblForCollReuse>
                                </Id>
                            </Scties>
                            <Cmmdty>
                                <Qty>
                                    <UnitOfMeasr><xsl:value-of select="Collateral_unit_of_measure" /></UnitOfMeasr>
                                </Qty>
                            </Cmmdty>
                        </Tp>
                        <BsktIdr>
                            <NotAvlbl>NTAV</NotAvlbl>
                        </BsktIdr>
                    </RpTrad>
                </CollData>
                <xsl:value-of select="@Action_type" />
                <LvlTp><xsl:value-of select="@Level" /></LvlTp>
                <SplmtryData>
                    <PlcAndNm>a</PlcAndNm>
                    <Envlp>
                        <auto-generated_for_wildcard xmlns=""/>
                    </Envlp>
                </SplmtryData>
            </New>
            <CollUpd>
                <CollData>
                    <TxCollData>
                        <RpTrad>
                            <BsktIdr>
                                <xsl:if test="@Collateral_basket_identifier = 'NTAV'" >
                                            <NotAvlbl><xsl:value-of select="@Collateral_basket_identifier" /></NotAvlbl>
                                        </xsl:if>
                                        <xsl:if test="not(@Collateral_basket_identifier = 'NTAV')" >
                                            <Id><xsl:value-of select="@Collateral_basket_identifier" /></Id>
                                        </xsl:if>
                            </BsktIdr>
                        </RpTrad>
                    </TxCollData>
                </CollData>
            </CollUpd>
        </TradData>
        <SplmtryData>
            <PlcAndNm>a</PlcAndNm>
            <Envlp>
                <auto-generated_for_wildcard xmlns=""/>
            </Envlp>
        </SplmtryData>
    </SctiesFincgRptgTxRpt>
</Document>
</xsl:template> 

<xsl:template match="/*" mode="mPass2">
    <xsl:copy>
        <xsl:copy-of select="@*"/>
        <xsl:apply-templates mode="mPass2"/>
    </xsl:copy>
</xsl:template>

<xsl:template match=
    "*[not(@*|*|comment()|processing-instruction()) 
     and normalize-space()=''
      ]" mode="mPass2"/>

</xsl:stylesheet>

这是结果的摘录:

<RptgCtrPty>
              <Id>
                <LEI>G5GSEF7VJP5I7OUK5572</LEI>
              </Id>
              <Ntr>
                <FI>
                  <Clssfctn></Clssfctn>
                  <InvstmtFndClssfctn></InvstmtFndClssfctn>
                </FI>
              </Ntr>
              <Brnch>
                <Id>
                  <Ctry></Ctry>
                </Id>
              </Brnch>
              <Sd></Sd>
</RptgCtrPty>

我希望:

<RptgCtrPty>
              <Id>
                <LEI>G5GSEF7VJP5I7OUK5572</LEI>
              </Id>              
</RptgCtrPty>

转换工作正常,只是删除需要工作的空标签。

感谢您的帮助, 扫罗

最佳答案

尝试更改最后的 mPass2这个的模板....

<xsl:template 
     match="*[not(.//@*|.//comment()|.//processing-instruction()) and normalize-space()='']" 
     mode="mPass2"/>

因此,这将检查所有后代,而不仅仅是直系子代。 (当前节点上的 normalize-space 将应用于所有后代文本节点的串联)

关于xml - XSLT - XML 转换和删除空标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54550493/

有关xml - XSLT - XML 转换和删除空标记的更多相关文章

  1. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  2. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  3. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  4. ruby - 将散列转换为嵌套散列 - 2

    这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[

  5. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  6. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  7. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  8. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  9. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

    我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

  10. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

随机推荐