使用条件 xslt 1.0 将特定元素值替换为新字符串
Replace specific element value with new strings using conditions xslt 1.0
想用 xslt 条件中提供的条件(Assigned->assigned、Reserved->reserved 等)替换 orderLineStatus 值。它工作正常,但所有其他节点在转换后不显示
**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 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>
想用 xslt 条件中提供的条件(Assigned->assigned、Reserved->reserved 等)替换 orderLineStatus 值。它工作正常,但所有其他节点在转换后不显示
**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 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>