XSLT:代码嵌套字段&有多个参数的字段?

时间:2013-03-27 13:29:52

标签: xslt xml-parsing filemaker

现在我的情况比In XSLT for MODS XML to FilemakerPro conversion, how treat a mod with a parameter?中提到的情况要复杂得多。在我试图转换为FileMaker Pro格式的XML中,我有:

<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
  3. 在生成的XML中,我想要“family”和“given”名称以及roleTerm的单独列。

    此外,在某些情况下,会有两个或更多此类<name>...</name>个实体。我该如何处理 - 以便在目标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>形式(.e。,书目源xml文件中的多个作者)。

1 个答案:

答案 0 :(得分: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']"/>

用于选择roleTerm

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