2013-03-27 14 views
0

現在我的情況比我在In XSLT for MODS XML to FilemakerPro conversion, how treat a mod with a parameter?中詢問的要複雜得多。在XML我想轉換成的FileMaker Pro格式,我有:XSLT:代碼如何使用多個參數嵌套字段和字段?

<name type="personal"> 
    <namePart type="family"> 
     Giobbi 
    </namePart> 
    <namePart type="given"> 
     Robert 
    </namePart> 
    <role> 
     <roleTerm authority="marcrelator" type="code"> 
     aut 
     </roleTerm> 
    </role> 
</name> 

什麼我放在XSLT爲<xsl:value-of select="...." />來處理。新的併發症是:

  1. 源XML具有內部name幾個元素嵌套結構。
  2. 對於項目roleTerm有兩個參數authoritycode

在生成的XML,我想爲「家庭」和「給予」的名稱和爲roleTerm單獨的列。

此外,在某些情況下,會有兩個或更多個這樣的實體。我如何處理 - 以便在目標XML中創建額外的列?是否像MAXREPEAT"1"更改爲更大的價值一樣簡單?

所需的輸出應該是這樣的:

<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult"  
    xmlns:mod="http://www.loc.gov/mods/v3"> 
    <ERRORCODE>0</ERRORCODE> 
    <PRODUCT NAME="N/A" BUILD="N/A" VERSION="N/A"/> 
<DATABASE NAME="N/A" LAYOUT="N/A" RECORDS="1" DATEFORMAT="M/d/yyyy" TIMEFORMAT="h:mm:ss a"/> 
<METADATA> 
    <FIELD EMPTYOK="YES" MAXREPEAT="1" TYPE="TEXT" NAME="Title"/> 
    <FIELD EMPTYOK="YES" MAXREPEAT="1" TYPE="TEXT" NAME="Genre"/> 
    <FIELD EMPTYOK="YES" MAXREPEAT="1" TYPE="TEXT" NAME="LastName"/> 
    <FIELD EMPTYOK="YES" MAXREPEAT="1" TYPE="TEXT" NAME="FirstName"/> 
</METADATA> 
<RESULTSET> 
    <ROW MODID="1" RECORDID="1"> 
    <COL> 
     <DATA>Roberto Giobbi's Card college. Volume 1</DATA> 
    </COL> 
    <COL> 
     <DATA>book</DATA> 
    </COL> 
    <COL> 
     <DATA>Giobbi</DATA> 
    </COL> 
    <COL> 
     <DATA>Roberto</DATA> 
    </COL> 
    </ROW> 
</RESULTSET> 
</FMPXMLRESULT> 

我說「像」是因爲,當然會有更多的行,一個在源XML的每個項目,更重要的是因爲當源中有多個<name type="personal">...</name>字段(書目源xml文件中的多個作者)時,我不知道結果應該是什麼樣子。

+0

你可以添加一個你想產生的xml的例子嗎? – Joep 2013-03-27 14:27:27

+0

我不知道生成的xml應該是什麼樣的:它應該是FMPRESULT格式。如果沒有這些新的mod項目,我會問,我能夠使用帶有最小XSLT的'xsltproc'來獲取XML,但我不知道如何在我的查詢中顯示:在文本編輯器中,輸出是在單線很長;在一個XML編輯器中,我有一個顯示的結構,但我不知道如何把它放在這裏。 – murray 2013-03-27 15:16:39

+0

您可以編輯您的問題,然後您可以將其格式化爲代碼。使用類似http://www.freeformatter.com/xml-formatter.html的格式來格式化單行XML。 – Joep 2013-03-27 15:35:47

回答

0

實例選擇每一個文本內容:

重複COL的:

<xsl:for-each select="name"> 
    <ROW MODID="{position()}" RECORDID="{position()}"> 
     ... 
    </ROW> 
</xsl:for-each> 

對於選擇姓:

<xsl:value-of select="namePart[@type='family']"/> 

爲了生成

<xsl:value-of select="namePart[@type='given']"/> 

對於選擇g roleTerm

<xsl:value-of select="roleTerm[@authority='marcrelator' and @type='code']"/>