新手:XLST 1.0 节点集变量按位置查找?

发布于 2024-11-06 05:30:06 字数 2224 浏览 0 评论 0原文

尝试编写一个 XSLT 1.0 模板,该模板将从 Filemaker FMPXMLRESULT METADATA/@NAME 属性创建元素。下面是示例 XML:

<?xml version="1.0" encoding="UTF-16" ?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<METADATA>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Type" TYPE="TEXT"/>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Level" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="2">
    <ROW MODID="18" RECORDID="28133">
        <COL><DATA>O1</DATA></COL>
        <COL><DATA>L1</DATA></COL>
    </ROW>
    <ROW MODID="5" RECORDID="28153">
        <COL><DATA>D12</DATA></COL>
        <COL><DATA>L1</DATA></COL>
    </ROW>
</RESULTSET>
</FMPXMLRESULT>

这是到目前为止我的 XLST 进度:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fmp="http://www.filemaker.com/fmpxmlresult" exclude-result-prefixes="fmp">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>

<xsl:variable name="labels" select="fmp:FMPXMLRESULT/fmp:METADATA/fmp:FIELD/@NAME"/>

<xsl:template match="fmp:FMPXMLRESULT">
    <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
        <PLAN>
            <xsl:for-each select="fmp:RESULTSET/fmp:ROW">
                <Sign>
                    <xsl:for-each select="fmp:COL">
                        <xsl:element name="{$labels[position()]}">
                            <xsl:value-of select="fmp:DATA"/>
                        </xsl:element>
                    </xsl:for-each>
                </Sign>
            </xsl:for-each>
        </PLAN>
    </FMPXMLRESULT>
</xsl:template>

</xsl:stylesheet>

我的问题出在第 13 行:

<xsl:element name="{$labels[position()]}">

其中,position() 与 fmp:COL 的位置无关,而且我使用它的方式可能毫无意义。

我想引用的是 xsl:for-each 循环中当前的 fmp:COL 元素,但考虑到我的处理方式,我怀疑在 XLST 1.0 中无法获得该元素。

有人对如何进行有建议或指示吗?

非常感谢!

查尔斯

Trying to write an XSLT 1.0 template that will create elements from the Filemaker FMPXMLRESULT METADATA/@NAME attribute. Here's sample XML:

<?xml version="1.0" encoding="UTF-16" ?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<METADATA>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Type" TYPE="TEXT"/>
    <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Level" TYPE="TEXT"/>
</METADATA>
<RESULTSET FOUND="2">
    <ROW MODID="18" RECORDID="28133">
        <COL><DATA>O1</DATA></COL>
        <COL><DATA>L1</DATA></COL>
    </ROW>
    <ROW MODID="5" RECORDID="28153">
        <COL><DATA>D12</DATA></COL>
        <COL><DATA>L1</DATA></COL>
    </ROW>
</RESULTSET>
</FMPXMLRESULT>

And here's my XLST progress so far:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fmp="http://www.filemaker.com/fmpxmlresult" exclude-result-prefixes="fmp">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>

<xsl:variable name="labels" select="fmp:FMPXMLRESULT/fmp:METADATA/fmp:FIELD/@NAME"/>

<xsl:template match="fmp:FMPXMLRESULT">
    <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
        <PLAN>
            <xsl:for-each select="fmp:RESULTSET/fmp:ROW">
                <Sign>
                    <xsl:for-each select="fmp:COL">
                        <xsl:element name="{$labels[position()]}">
                            <xsl:value-of select="fmp:DATA"/>
                        </xsl:element>
                    </xsl:for-each>
                </Sign>
            </xsl:for-each>
        </PLAN>
    </FMPXMLRESULT>
</xsl:template>

</xsl:stylesheet>

My trouble is in line 13:

<xsl:element name="{$labels[position()]}">

Where position() doesn't relate to the position of fmp:COL, and likely is meaningless the way I've used it.

What I'd like to reference is the current fmp:COL element in the xsl:for-each loop, but I suspect that this can't be obtained in XLST 1.0 given the way I'm approaching it.

Does anyone have suggestions or pointers on how to proceed?

Many thanks!

Charles

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情释 2024-11-13 05:30:06

看看这个问题/答案。这可能就是您正在寻找的。
Filemaker XSL 按名称选择列

更新:
这篇文章对于类似的问题也有很好的解决方案:
XSLT 问题。当原始 XML 将字段标签与数据放在不同的部分时,如何将字段标签与数据配对?

Take a look at this question/answer. It might be what you are looking for.
Filemaker XSL Select Column By Name

Update:
This post also has great solutions to a similar question:
XSLT question. How to pair field tags with data when original XML has them in separate sections?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文