[英]Copy the XML with additional logic using XSLT 1.0
我想復制整個 xml 並應用此附加邏輯:如果 /OrderMessage/IncomingOrderMessage/IncomingOrder/TransferDetails/TransferDetails_item(只需檢查第一個)/數量標簽,則將 /OrderMessage/IncomingOrderMessage/IncomingOrder/doNotTransfer 設置為 true。 否則,只需照原樣復制 /OrderMessage/IncomingOrderMessage/IncomingOrder/doNotTransfer。
輸入.xml:
<?xml version="1.0" encoding="UTF-8"?>
<OrderMessage>
<IncomingOrderMessage>
<IncomingOrder>
<totalOrderQuantity>10000</totalOrderQuantity>
<totalOrderPrice>500000</totalOrderPrice>
<TransferDetails>
<TransferDetails_item>
<quantity>5000</quantity>
<price>250000</price>
<location>India</location>
</TransferDetails_item>
<TransferDetails_item>
<quantity>5000</quantity>
<price>250000</price>
<location>US</location>
</TransferDetails_item>
</TransferDetails>
<orderCurrency>USD</orderCurrency>
<doNotTransfer>false</doNotTransfer>
<orderPayment>Credit</orderPayment>
</IncomingOrder>
</IncomingOrderMessage>
</OrderMessage>
Output.xml
<?xml version="1.0" encoding="UTF-8"?>
<OrderMessage>
<IncomingOrderMessage>
<IncomingOrder>
<totalOrderQuantity>10000</totalOrderQuantity>
<totalOrderPrice>500000</totalOrderPrice>
<TransferDetails>
<TransferDetails_item>
<quantity>5000</quantity>
<price>250000</price>
<location>India</location>
</TransferDetails_item>
<TransferDetails_item>
<quantity>5000</quantity>
<price>250000</price>
<location>US</location>
</TransferDetails_item>
</TransferDetails>
<orderCurrency>USD</orderCurrency>
<doNotTransfer>true</doNotTransfer>
<orderPayment>Credit</orderPayment>
</IncomingOrder>
</IncomingOrderMessage>
</OrderMessage>
有人可以幫我嗎。
我可以通過以下 xslt 獲得 output:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="utf-8" indent="no"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="IncomingOrder">
<xsl:choose>
<xsl:when test="//TransferDetails_item[1]/quantity ">
<xsl:copy>
<xsl:apply-templates select="@*|node() except doNotTransfer"/>
<doNotTransfer>true</doNotTransfer>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
或者很快:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="doNotTransfer[../TransferDetails/TransferDetails_item/quantity]">
<xsl:copy>true</xsl:copy>
</xsl:template>
</xsl:stylesheet>
如果doNotTransfer
的值始終為true
或false
,您可以制作第二個模板:
<xsl:template match="doNotTransfer">
<xsl:copy>
<xsl:value-of select="boolean(../TransferDetails/TransferDetails_item/quantity)" />
</xsl:copy>
</xsl:template>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.