Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt Filemaker XSL按名称选择列_Xslt_Filemaker - Fatal编程技术网

Xslt Filemaker XSL按名称选择列

Xslt Filemaker XSL按名称选择列,xslt,filemaker,Xslt,Filemaker,我希望使用列名(而不是位置)从Filemaker导出。目前,我导出以下XSL样式表,该样式表通过位置导出: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fm="http://www.filemaker.com/fmpxmlresult" exclude-result-pr

我希望使用列名(而不是位置)从Filemaker导出。目前,我导出以下XSL样式表,该样式表通过位置导出:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:fm="http://www.filemaker.com/fmpxmlresult" exclude-result-prefixes="fm" >
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
  <people>
    <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW">
      <person>
        <name>
          <xsl:value-of select="fm:COL[01]/fm:DATA"/>
        </name>
        <location>
          <xsl:value-of select="fm:COL[02]/fm:DATA"/>
        </location>
      </person>
    </xsl:for-each> 
  </people>
</xsl:template>
</xsl:stylesheet>


有什么想法吗?谢谢。

如果您只是想让代码更具可读性,那么我建议您做一些简单的事情,比如:

<!-- expected columns -->
<xsl:variable name="NAME" value="1" />
<xsl:variable name="LOCATION" value="2" />
<!-- ... -->
<people>
  <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW">
    <person>
      <name>
        <xsl:value-of select="fm:COL[$NAME]/fm:DATA"/>
      </name>
      <location>
        <xsl:value-of select="fm:COL[$LOCATION]/fm:DATA"/>
      </location>
    </person>
  </xsl:for-each> 
</people>
它将返回相同的结果

如果你需要更复杂的东西,请解释

更新:

按列名引用列比较困难,但可以使用类似的方法:

<!-- Define a key to get a field and all fields that precede it by the field name -->
<xsl:key name="N" match="/fm:FMPXMLRESULT/fm:METADATA/fm:FIELD" use="@NAME" />
<xsl:key name="N" match="/fm:FMPXMLRESULT/fm:METADATA/fm:FIELD" 
  use="following-sibling::fm:FIELD/@NAME" />
<!-- Then *count* them it in the code like that -->
<people>
  <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW">
    <person>
      <name>
        <xsl:value-of select="fm:COL[count(key('N', 'name'))]" />
      </name>
      <location>
        <xsl:value-of select="fm:COL[count(key('N', 'location'))]" />
      </location>
    </person>
  </xsl:for-each> 
</people>


不是很优雅,但是很有效。

如果您只是想让代码更具可读性,那么我建议您做一些简单的事情,比如:

<!-- expected columns -->
<xsl:variable name="NAME" value="1" />
<xsl:variable name="LOCATION" value="2" />
<!-- ... -->
<people>
  <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW">
    <person>
      <name>
        <xsl:value-of select="fm:COL[$NAME]/fm:DATA"/>
      </name>
      <location>
        <xsl:value-of select="fm:COL[$LOCATION]/fm:DATA"/>
      </location>
    </person>
  </xsl:for-each> 
</people>
它将返回相同的结果

如果你需要更复杂的东西,请解释

更新:

按列名引用列比较困难,但可以使用类似的方法:

<!-- Define a key to get a field and all fields that precede it by the field name -->
<xsl:key name="N" match="/fm:FMPXMLRESULT/fm:METADATA/fm:FIELD" use="@NAME" />
<xsl:key name="N" match="/fm:FMPXMLRESULT/fm:METADATA/fm:FIELD" 
  use="following-sibling::fm:FIELD/@NAME" />
<!-- Then *count* them it in the code like that -->
<people>
  <xsl:for-each select="fm:FMPXMLRESULT/fm:RESULTSET/fm:ROW">
    <person>
      <name>
        <xsl:value-of select="fm:COL[count(key('N', 'name'))]" />
      </name>
      <location>
        <xsl:value-of select="fm:COL[count(key('N', 'location'))]" />
      </location>
    </person>
  </xsl:for-each> 
</people>


不是很优雅,但很有效。

这不是我想要做的。我希望能够按列名进行选择,这样,如果用户重新组织列,导出仍然有效。哦,我明白了。用另一个例子更新帖子。谢谢!这就是我要找的。干杯这不是我想要做的。我希望能够按列名进行选择,这样,如果用户重新组织列,导出仍然有效。哦,我明白了。用另一个例子更新帖子。谢谢!这就是我要找的。干杯请提供应用转换的(最小)XML文档。很少有人知道Filemaker文件的格式。请提供应用转换的(最小)XML文档。很少有人知道Filemaker文件的格式。