我是XML和XSLT的新手,想知道是否有人可以在这里提供帮助:
我有一个带有以下数据的XML表单
<?xml version="1.0" encoding="utf-8"?>
<uformrecords>
<uformrecord>
<state>Approved</state>
<created>2009-11-13T10:01:55</created>
<updated>2009-11-13T10:01:55</updated>
<id>119ecc43-df79-46e1-9020-b2e27e239175</id>
<ip>127.0.0.1</ip>
<pageid>0</pageid>
<memberkey></memberkey>
<fields>
<name record="119ecc43-df79-46e1-9020-b2e27e239175" sortorder="0">
<key>2295187e-0345-4260-a406-eabcc1e774e2</key>
<fieldKey>e6157c93-0b54-4415-b7ba-5c7c2c953b70</fieldKey>
<caption>Name</caption>
<datatype>String</datatype>
<values>
<value><![CDATA[My Name]]></value>
</values>
</name>
<email record="119ecc43-df79-46e1-9020-b2e27e239175" sortorder="1">
<key>a92875a8-938d-4ba0-990a-59a3518ce62c</key>
<fieldKey>d8b10ffb-c437-4a44-8df6-01e6af5ac26f</fieldKey>
<caption>Email</caption>
<datatype>String</datatype>
<values>
<value><![CDATA[pph@testdomain.com]]></value>
</values>
</email>
</fields>
</uformrecord>
</uformrecords>
在页面上我有以下XSLT代码以获取一些记录
<ul> <xsl:for-each select="umbraco.contour:GetRecordsFromPage($currentPage/@id)//uformrecord">
<xsl:sort select="created" order="ascending"/>
<li>
A record with id id <xsl:value-of select="id"/> with the state set to <xsl:value-of select="state"/> i
was created on <xsl:value-of select="umbraco.library:LongDate(created)"/>
</li>
</xsl:for-each>
</ul>
这样可以正常但如果我添加标题
<xsl:value-of select="caption"/>
该字段为空。我认为它是空的,因为节点可能需要迭代。所以我有以下代码来遍历记录
<xsl:for-each select="umbraco.contour:GetRecord($id)/uformrecord/fields/child::*">
<xsl:sort select="caption" order="ascending"/>
<h4>
<xsl:value-of select=" caption"/>
</h4>
</xsl:for-each>
但我有错误,ID没有声明 - 如果我声明id我得到错误,它不是正确的GUID格式。任何人都可以建议如何克服这个问题,并显示“标题”元素?
由于
答案 0 :(得分:0)
在您的第一个 xsl:for-each 中,您正在迭代 uformrecord ,这将是您在循环中的上下文。
<xsl:for-each select="umbraco.contour:GetRecordsFromPage($currentPage/@id)//uformrecord">
但是,正如您所发现的那样,字幕元素不是 uformrecord 元素的直接子元素,而是在字段元素下的较低元素
由于您已定位于 uformrecord ,因此您应该能够将 xsl:for-each 简化为:
<xsl:for-each select="fields/*">
<xsl:sort select="caption" order="ascending"/>
<h4>
<xsl:value-of select="caption"/>
</h4>
</xsl:for-each>