首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否由于格式无效导致XSL转换失败?

是否由于格式无效导致XSL转换失败?
EN

Stack Overflow用户
提问于 2020-09-17 21:22:20
回答 1查看 57关注 0票数 0

我尝试从cbc:ID元素中删除字符NO,但仅在找到这些字符的文件中删除。

代码语言:javascript
复制
<cbc:ID>NO123456789</cbc:ID>

应该变成:

代码语言:javascript
复制
<cbc:ID>123456789</cbc:ID>

我已经取得了一些进展,但遇到了障碍,我可以看到我做错了什么。XSL工具插件抱怨Notepad++无效。

XML文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
    xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
    xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
    xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <cac:PaymentMeans>
        <cbc:PaymentMeansCode>31</cbc:PaymentMeansCode>
        <cac:PayeeFinancialAccount>
            <cbc:ID>NO60210517971</cbc:ID>
        </cac:PayeeFinancialAccount>
    </cac:PaymentMeans>
</Invoice>

XSL文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
    xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
    xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
    <xsl:template match="cac:PaymentMeans">

        <Invoice version="1.0"
            xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
            xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
            xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
            xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <cac:PaymentMeans>
                <cac:PayeeFinancialAccount>
                    <cbc:ID>
                        <xsl:variable name="accountnumber" select="cac:PayeeFinancialAccount/cbc:ID"/>
                        <xsl:choose>
                            <xsl:when test="contains($accountnumber, 'NO'">
                                <xsl:value-of select="translate($accountnumber, 'NO', '')"/>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:value-of select="$accountnumber"/>
                            </xsl:otherwise>
                        </xsl:choose>
                    </cbc:ID>
                </cac:PayeeFinancialAccount>
            </cac:PaymentMeans>
        </Invoice>
    </xsl:template>
</xsl:stylesheet>
EN

回答 1

Stack Overflow用户

发布于 2020-09-18 23:02:37

我对您的要求的解释是“我正在尝试从cbc:ID元素中删除字符NO ...”下面是样式表解决方案。只需要替换一次,其余的可以通过复制模板来处理:

代码语言:javascript
复制
<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="//cbc:ID" priority="2">
        <xsl:copy>
            <xsl:value-of select="replace(.,'NO','')"/>
        </xsl:copy>
    </xsl:template>

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

以下是将xslt应用于xml时的结果:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
   xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
   xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
   xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <cac:PaymentMeans>
      <cbc:PaymentMeansCode>31</cbc:PaymentMeansCode>
      <cac:PayeeFinancialAccount>
         <cbc:ID>60210517971</cbc:ID>
      </cac:PayeeFinancialAccount>
   </cac:PaymentMeans>
</Invoice>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63939009

复制
相关文章

相似问题

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