2014-01-09 28 views
-3

我需要一個XSLT來根據一個條件重構XML。這是要求。需要用於重構XML節點的XSLT

這是源XML,其中有兩個節點之一是標頭1和第二個是標題2

<?xml version="1.0" encoding="UTF-8"?> 
<Data> 
<header1> 
    <Id>a3s600000004Vi3AAE</Id> 
    <field1>a3n600000008X1ZAAU</field1> 
    <field2>0066000000Jv4RWAAZ</field2> 
    <field3>10121226</field3> 
    <field4>Alexis Camacho</field4> 
</header1> 
<header1> 
    <Id>a3s600000004Vi4AAE</Id> 
    <field1>a3n600000008PjbAAE</field1> 
    <field2>0066000000Jv0m1AAB</field2> 
    <field3>07043A</field3> 
    <field4>Jose M Rodriguez</field4> 
</header1> 
<header2> 
    <field5>a086000000DA5HpAAL</field5> 
    <field6>a3s600000004Vi3AAE</field6> 
</header2> 
<header2> 
    <field5>a086000000DA5HqAAL</field5> 
    <field6>a3n600000008PjbAAE</field6> 
</header2> 

這是目標XML,在此有一個包含所有隻有一個節點的7個字段與具有場5值條件應等於ID

<?xml version="1.0" encoding="UTF-8"?> 
<Data> 
<header> 
    <Id>a3s600000004Vi3AAE</Id> 
    <field1>a3n600000008X1ZAAU</field1> 
    <field2>0066000000Jv4RWAAZ</field2> 
    <field3>10121226</field3> 
    <field4>Alexis Camacho</field4> 
    <field5>a3s600000004Vi3AAE</field5> 
    <field6>a086000000DA5HpAAL</field6> 
</header> 
<header> 
    <Id>a3s600000004Vi4AAE</Id> 
    <field1>a3n600000008PjbAAE</field1> 
    <field2>0066000000Jv0m1AAB</field2> 
    <field3>07043A</field3> 
    <field4>Jose M Rodriguez</field4> 
    <field5>a3s600000004Vi4AAE</field5> 
    <field6>a086000000DA5HqAAL</field6> 
</header> 

用於轉換的條件是字段5的值應該等於ID。所以請提供一個XSLT來執行操作。

我有以下XSLT試圖打印單場5:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<html> 
<body> 
<h2>Items</h2> 
<table border="1"> 
    <tr bgcolor="#9acd32"> 
    <th style="text-align:left">Opportunities_id</th> 
    </tr> 
    <xsl:for-each select="Data/header1"> 
    <xsl:value-of select="count(.)"/> 
    <xsl:if test="count(.) &gt; 0"> 
    <xsl:variable name="oppId" select="string(/Data/header1/Id)"/> 
       <xsl:element name="EXPORTRESPONSE"  namespace="fieldpoint.com/namespaces">; <xsl:for-each select="//Data/header2"> 
         <xsl:if test="count(.) &gt; 0"> 
          <xsl:variable name="opprId"  select="string(/Data/header2/field5)"/>        
          <xsl:if test="compare($opprId,$oppId)=0">asda 
          <Opportunities_id><xsl:value-of select="$opprId"/></Opportunities_id> 
          </xsl:if> 
         </xsl:if> 
        </xsl:for-each> 
       </xsl:element> 
    </xsl:if> 
    </xsl:for-each> 
</table> 
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

但它並不成功。請建議我做錯了什麼

在此先感謝。

+2

請添加您的XSLT代碼(你什麼管理到目前爲止)的職位。 Stackoverflow不會爲你編寫代碼,它可以幫助你解決編程問題。 –

+0

「,條件是字段5的值應該等於ID。」我沒有看到你的例子中這個條件是真的。如果是這樣,使用**鍵**可以輕鬆完成此任務。 –

+0

哦..這是複製粘貼錯誤.. – user3132758

回答

-1

我已經刪除了一些你的代碼,但你可以在這裏實現你的邏輯。

嘗試這一次,

XML(如您所提供):

<?xml version="1.0" encoding="UTF-8"?> 
<Data> 
<header> 
    <Id>a3s600000004Vi3AAE</Id> 
    <field1>a3n600000008X1ZAAU</field1> 
    <field2>0066000000Jv4RWAAZ</field2> 
    <field3>10121226</field3> 
    <field4>Alexis Camacho</field4> 
    <field5>a3s600000004Vi3AAE</field5> 
    <field6>a086000000DA5HpAAL</field6> 
</header> 
<header> 
    <Id>a3s600000004Vi4AAE</Id> 
    <field1>a3n600000008PjbAAE</field1> 
    <field2>0066000000Jv0m1AAB</field2> 
    <field3>07043A</field3> 
    <field4>Jose M Rodriguez</field4> 
    <field5>a3s600000004Vi4AAE</field5> 
    <field6>a086000000DA5HqAAL</field6> 
</header> 
</Data> 

XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<html> 
<body> 
<h2>Items</h2> 
<table border="1"> 
    <tr bgcolor="#9acd32"> 
    <th style="text-align:left">Opportunities_id</th> 
    </tr> 
    <xsl:for-each select="Data/header"> 
     <tr> 
      <td> 
       <xsl:if test="Id/text() = field5/text()"> 
        <xsl:value-of select="field4/text()" /> 
       </xsl:if> 
      </td> 
     </tr> 
    </xsl:for-each>  
</table> 
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

測試上:http://www.xslfiddle.net/

注意:這不完全是你需要的,但你的問題在這個問題上解決了。祝你好運!

0

最後我能做到這一點與此XSLT

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!-- Edited by XMLSpy® --> 
<xsl:stylesheet version="1.0" 
<xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<Target> 
    <xsl:for-each select="/Data/header1"> 
    <header> 
      <Id><xsl:value-of select="Id"/></Id> 
      <loan__Loan_Account__c><xsl:value-of select="loan__Loan_Account__c"/></loan__Loan_Account__c> 
      <loan__Loan_Account__c.Opportunity.Id><xsl:value-of select="loan__Loan_Account__c.Opportunity.Id"/></loan__Loan_Account__c.Opportunity.Id> 
      <loan__Loan_Account__c.Opportunity.Account_Number__c><xsl:value-of select="loan__Loan_Account__c.Opportunity.Account_Number__c"/> 
      </loan__Loan_Account__c.Opportunity.Account_Number__c> 
      <loan__Loan_Account__c.Opportunity.Account.Account_Name__c><xsl:value-of select="loan__Loan_Account__c.Opportunity.Account.Account_Name__c"/> 
      </loan__Loan_Account__c.Opportunity.Account.Account_Name__c> 
<xsl:variable name="idValue" select="Id"/> 
    <xsl:for-each select="/Data/header2"> 
      <xsl:variable name="oppValue" select="Opportunities_id"/> 
       <xsl:if test="$idValue = $oppValue"> 
         <Opportunities_id><xsl:value-of select="$oppValue"/></Opportunities_id> 
         <Properties_id><xsl:value-of select="Properties_id"/></Properties_id> 
       </xsl:if> 
    </xsl:for-each> 
</header> 
    </xsl:for-each> 
     </Target> 
    </xsl:template> 
</xsl:stylesheet>