【问题标题】:Replace specific element value with new strings using conditions xslt 1.0使用条件 xslt 1.0 将特定元素值替换为新字符串
【发布时间】:2021-07-19 13:37:48
【问题描述】:

想用 xslt 条件中提供的条件替换 orderLineStatus 值(Assigned->assigned, Reserved->reserved 等)。它工作正常,但转换后所有其他节点都没有显示

**xml:**
<updateOrderLineStatusRequest
xmlns="http://www.abc1.com/schema/integration/helo/order"
xmlns:shipping="http://abc1.com/schema/integration/helo/shipping"
xmlns:message="http://abc1.com/schema/integration/message" message:timestamp="2021-01-25T10:13:13Z">
<orderLineStatusUpdate orderNumber="Test_001" line="3">
    <orderLineStatus>Assigned</orderLineStatus>
    <statusQuantity>1</statusQuantity>
    <leadTime unit="days">
        <shipping:min>4</shipping:min>
        <shipping:max>4</shipping:max>
    </leadTime>
</orderLineStatusUpdate>
</updateOrderLineStatusRequest>

xslt 1.0:

 <?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:tst="http://www.abc1.com/schema/integration/helo/order"
xmlns:shipping="http://www.abc1.com/schema/integration/helo/shipping"
xmlns:message="http://www.abc1.com/schema/integration/message" message:timestamp="2021-01-25T10:13:13Z" >
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>
    <xsl:template match="tst:orderLineStatusUpdate ">
    <updateOrderLineStatusRequest >
        <xsl:choose>
            <xsl:when test="tst:orderLineStatus='Assigned'">
                <orderLineStatus>assigned</orderLineStatus>
            </xsl:when>
            <xsl:when test="tst:orderLineStatus='Reserved'">
                <orderLineStatus>reserved</orderLineStatus>
            </xsl:when>
            <xsl:otherwise>
                <orderLineStatus>reserved1</orderLineStatus>
            </xsl:otherwise>
        </xsl:choose>
    </updateOrderLineStatusRequest >
</xsl:template>
 </xsl:stylesheet>

所需的输出也显示所有其他节点,但我当前的输出仅显示 orderLineStatus 节点

**Desired output:** 
  <updateOrderLineStatusRequest
 xmlns="http://www.abc1.com/schema/integration/helo/order"
 xmlns:shipping="http://abc1.com/schema/integration/helo/shipping"
  xmlns:message="http://abc1/schema/integration/message" message:timestamp="2021-01-25T10:13:13Z">
     <orderLineStatusUpdate orderNumber="Test_001" line="3">
      <orderLineStatus>assigned</orderLineStatus>
  <statusQuantity>1</statusQuantity>
     <leadTime unit="days">
       <shipping:min>4</shipping:min>
       <shipping:max>4</shipping:max>
   </leadTime>
  </orderLineStatusUpdate>
  </updateOrderLineStatusRequest>

 current output:
   <?xml version="1.0" encoding="UTF-8"?>
   <updateOrderLineStatusRequest xmlns:tst="http://www.abc1.com/schema/integration/helo/order" 
    xmlns:shipping="http://www.abc1.com/schema/integration/helo/shipping" 
      xmlns:message="http://www.abc1.com/schema/integration/message">
      <orderLineStatus>assigned</orderLineStatus>
    </updateOrderLineStatusRequest>

【问题讨论】:

    标签: xml xslt-1.0


    【解决方案1】:

    类似这样的东西(已编辑):

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:tst="http://www.abc1.com/schema/integration/helo/order"
      xmlns:shipping="http://www.abc1.com/schema/integration/helo/shipping"
      xmlns:message="http://www.abc1.com/schema/integration/message" 
      exclude-result-prefixes="shipping message tst"
      >
      <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>
      <xsl:template match="tst:orderLineStatusUpdate">
        <updateOrderLineStatusRequest xmlns="http://www.abc1.com/schema/integration/helo/order">
          <xsl:apply-templates select="@*|node()"/>
        </updateOrderLineStatusRequest>
      </xsl:template>
      
      <xsl:template match="tst:orderLineStatus">
        <xsl:copy>
          <xsl:choose>
            <xsl:when test=".='Assigned'">
              <xsl:text>assigned</xsl:text>
            </xsl:when>
            <xsl:when test=".='Reserved'">
              <xsl:text>reserved</xsl:text>
            </xsl:when>
            <xsl:otherwise>
              <xsl:text>reserved1</xsl:text>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:copy>
      </xsl:template>
        
      
      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    
      </xsl:template>
    
    </xsl:stylesheet>
    

    【讨论】:

    猜你喜欢
    • 2021-10-10
    • 1970-01-01
    • 2014-07-26
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    相关资源
    最近更新 更多