基于条件基于节点值分离模板等于“true”XSLT 1.0

时间:2016-02-16 16:56:16

标签: xml xslt xslt-1.0

我正在尝试格式化一条消息,其中<json:boolean name="isRecordSuccess">true</json:boolean>我希望消除该节点并仅获取<json:boolean name="isRecordSuccess">false</json:boolean>

Sample Message:

<?xml version="1.0" encoding="UTF-8"?>
<json:object xsi:schemaLocation="http://www.datapower.com/schemas/json jsonx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx">
    <json:array name="results">
        <json:object>
            <json:string name="RecordNumber"/>
            <json:boolean name="isRecordSuccess">false</json:boolean>
            <json:string name="errorDescription">PONumber__c not specified</json:string>
        </json:object>
        <json:object>
            <json:string name="RecordNumber">000100052774</json:string>
            <json:boolean name="isRecordSuccess">false</json:boolean>
            <json:string name="errorDescription">Work order's Product or Warehouse cannot be changed.</json:string>
        </json:object>
        <json:object>
            <json:string name="RecordNumber">000100052775</json:string>
            <json:boolean name="isRecordSuccess">true</json:boolean>
            <json:string name="errorDescription"/>
        </json:object>
        <json:object>
            <json:string name="RecordNumber">000100052983</json:string>
            <json:boolean name="isRecordSuccess">true</json:boolean>
            <json:string name="errorDescription"/>
        </json:object>
        <json:object>
            <json:string name="RecordNumber"/>
            <json:boolean name="isRecordSuccess">false</json:boolean>
            <json:string name="errorDescription">PONumber__c not specified</json:string>
        </json:object>
    </json:array>
    <json:boolean name="isSuccess">false</json:boolean>
</json:object>

期望的输出

<?xml version="1.0" encoding="UTF-8"?>
<json:object xsi:schemaLocation="http://www.datapower.com/schemas/json jsonx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx">
    <json:array name="results">
        <json:object>
            <json:string name="RecordNumber"/>
            <json:boolean name="isRecordSuccess">false</json:boolean>
            <json:string name="errorDescription">PONumber__c not specified</json:string>
        </json:object>
        <json:object>
            <json:string name="RecordNumber">000100052774</json:string>
            <json:boolean name="isRecordSuccess">false</json:boolean>
            <json:string name="errorDescription">Work order's Product or Warehouse cannot be changed.</json:string>
        </json:object>
        <json:object>
            <json:string name="RecordNumber"/>
            <json:boolean name="isRecordSuccess">false</json:boolean>
            <json:string name="errorDescription">PONumber__c not specified</json:string>
        </json:object>
    </json:array>
    <json:boolean name="isSuccess">false</json:boolean>
</json:object>

这是链接 Code

代码:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <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="/json:object/json:array/json:object/json:boolean[normalize-space(.) = 'true']">
        <xsl:apply-templates/>
    </xsl:template>
</xsl:stylesheet>

提供此输出

<?xml version="1.0" encoding="UTF-8"?>
<json:object xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"
             xsi:schemaLocation="http://www.datapower.com/schemas/json jsonx.xsd">
   <json:array name="results">
      <json:object>
         <json:string name="RecordNumber"/>
         <json:boolean name="isRecordSuccess">false</json:boolean>
         <json:string name="errorDescription">PONumber__c not specified</json:string>
      </json:object>
      <json:object>
         <json:string name="RecordNumber">000100052774</json:string>
         <json:boolean name="isRecordSuccess">false</json:boolean>
         <json:string name="errorDescription">Work order's Product or Warehouse cannot be changed.</json:string>
      </json:object>
      <json:object>
         <json:string name="RecordNumber">000100052775</json:string>true<json:string name="errorDescription"/>
      </json:object>
      <json:object>
         <json:string name="RecordNumber">000100052983</json:string>true<json:string name="errorDescription"/>
      </json:object>
      <json:object>
         <json:string name="RecordNumber"/>
         <json:boolean name="isRecordSuccess">false</json:boolean>
         <json:string name="errorDescription">PONumber__c not specified</json:string>
      </json:object>
   </json:array>
   <json:boolean name="isSuccess">false</json:boolean>
</json:object>

1 个答案:

答案 0 :(得分:2)

怎么样:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx">
<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="json:object[json:boolean[@name='isRecordSuccess']='true']"/>

</xsl:stylesheet>

这将删除具有子json:object的任何json:boolean,其中(a)@name属性等于“isRecordSuccess”,(b)文本值等于“true”。< / p>