2012-04-17 52 views
0

我有問題讓我的XML使用EXSLT str正確轉換:替換模板。EXSLT str:替換

這裏是我的XML:

<XML> 
<Item> 
    <Field> 
     <Name>ID</Name> 
     <Value>98765</Value> 
    </Field> 
    <Field> 
     <Name>ParentID</Name> 
     <Value>10002</Value> 
    </Field> 
    <Field> 
     <Name>Type</Name> 
     <Value>content</Value> 
    </Field> 
    <Field> 
     <Name>Name</Name> 
     <Value>TestAPI Course</Value> 
    </Field> 
    <Field> 
     <Name>URL</Name> 
     <Value></Value> 
    </Field> 
    <Field> 
     <Name>Description</Name> 
     <Value>a description</Value> 
    </Field> 
    <Field> 
     <Name>DateBegin</Name> 
     <Value>2012-04-04T00:00:00.000-07:00</Value> 
    </Field> 
    <Field> 
     <Name>DateEnd</Name> 
     <Value>2012-04-04T00:00:00.000-08:00</Value> 
    </Field> 
    <Field> 
     <Name>DateCreated</Name> 
     <Value>2012-04-03T00:00:00.000-07:00</Value> 
    </Field> 
    <Field> 
     <Name>DateModified</Name> 
     <Value>2012-04-04T00:00:00.000-06:00</Value> 
    </Field> 
</Item> 

這裏是我的XSL:

<?xml version="1.0" encoding="utf-16"?> 
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:str="http://exslt.org/strings" extension-element-prefixes="str" version="1.0"> 
     <xsl:import href="C:\inetpub\wwwroot\LMSConnector\LMS\XSL\str.xsl"/> 
     <xsl:template match="/Items"> 
      <xsl:call-template name="str:replace"> 
       <xsl:with-param name="string" select="Field/Name"/> 
       <xsl:with-param name="search" select="ID"/> 
       <xsl:with-param name="replace" select="sco-id"/> 
      </xsl:call-template> 
     </xsl:template> 
    </xsl:stylesheet> 

我的問題是,我只是得到一個XML文檔頭,沒有別的,但沒有別的?我不認爲我離工作的解決方案很遠,問題可能在於我爲模板上的「匹配」參數設置的值,以及調用模板中的選擇參數與參數節點。

任何幫助,將不勝感激。

邁克

+0

哪裏是你的XSL? – hroptatyr 2012-04-17 15:44:26

回答

1

你試圖匹配<xsl:template match="/Items">,但是你的XML包含<Item>元素,不<Items>

編輯


難道這就是你想幹什麼?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:str="http://exslt.org/strings" extension-element-prefixes="str"> 
    <xsl:import href="http://delicious-library-export.googlecode.com/svn/trunk/str/str.xsl"/> 
    <xsl:output method="xml" encoding="utf-8" indent="no"/> 

    <xsl:template match="/Item/Field/Name/text()"> 
     <xsl:call-template name="str:replace"> 
      <xsl:with-param name="string" select="."/> 
      <xsl:with-param name="search" select="'ID'"/> 
      <xsl:with-param name="replace" select="'sco-id'"/> 
     </xsl:call-template> 
    </xsl:template> 

    <xsl:template match="*">  
     <xsl:copy> 
     <xsl:apply-templates/> 
     </xsl:copy>  
    </xsl:template> 

    </xsl:stylesheet> 

結果:

<?xml version="1.0" encoding="utf-8"?> 
<Item> 
    <Field> 
     <Name>sco-id</Name> 
     <Value>98765</Value> 
    </Field> 
    <Field> 
     <Name>Parentsco-id</Name> 
     <Value>10002</Value> 
    </Field> 
    <Field> 
     <Name>Type</Name> 
     <Value>content</Value> 
    </Field> 
    <Field> 
     <Name>Name</Name> 
     <Value>TestAPI Course</Value> 
    </Field> 
    <Field> 
     <Name>URL</Name> 
     <Value/> 
    </Field> 
    <Field> 
     <Name>Description</Name> 
     <Value>a description</Value> 
    </Field> 
    <Field> 
     <Name>DateBegin</Name> 
     <Value>2012-04-04T00:00:00.000-07:00</Value> 
    </Field> 
    <Field> 
     <Name>DateEnd</Name> 
     <Value>2012-04-04T00:00:00.000-08:00</Value> 
    </Field> 
    <Field> 
     <Name>DateCreated</Name> 
     <Value>2012-04-03T00:00:00.000-07:00</Value> 
    </Field> 
    <Field> 
     <Name>DateModified</Name> 
     <Value>2012-04-04T00:00:00.000-06:00</Value> 
    </Field> 
</Item> 
+0

嗨,我將它改爲「Item」 - 感謝您發現這個明顯的bug!現在我剛剛得到這個返回:<?xml version =「1.0」encoding =「utf-16」?> ID98765ParentID10002TypecontentNameTestAPI CourseURLDescriptiona descriptionDateBegin2012-04-04T00:00:00.000-07:00DateEnd2012-04-04T00:00:00.000-08: 00DateCreated2012-04-03T00:00:00.000-07:00DateModified2012-04-04T00:00:00.000-06:00 – 2012-04-18 08:14:19

+0

@MikeSowerbutts查看已更新的答案 – 2012-04-18 09:06:17