2013-03-27 51 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']"/>