2

我需要调整以下 XPath 表达式以Amend_Start_Date从示例 XML(来自 MS InfoPath)返回“最新”:

//my:Amend_Data[0=count(following-sibling::my:Amend_Data)]//my:Amend_Start_Date

和 XML:

<?xml version="1.0" encoding="UTF-8"?><?mso-infoPathSolution solutionVersion="1.0.0.440" productVersion="14.0.0" PIVersion="1.0.0.0" href="file:///C:\Documents%20and%20Settings\Chris\Local%20Settings\Application%20Data\Microsoft\InfoPath\Designer3\1c02663d7ed84d09\manifest.xsf" ?><?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?><?mso-infoPath-file-attachment-present?><my:myFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:dfs="http://schemas.microsoft.com/office/infopath/2003/dataFormSolution" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-05-05T19:56:08" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xml:lang="en-us">
<my:MasterSection>
    <my:Planning_Section>
        <my:Planned_Start_Date>2012-09-12</my:Planned_Start_Date>
        <my:Planned_End_Date>2012-09-14</my:Planned_End_Date>
    </my:Planning_Section>
    <my:Actual_Section>
        <my:Actual_Start_Date>2012-09-13</my:Actual_Start_Date>
        <my:Actual_End_Date>2012-09-15</my:Actual_End_Date>
    </my:Actual_Section>
    <my:Amend_Hider>
        <my:Amend_Info_Repeater_Group>
            <my:Amend_Info_Repeater>
                <my:Amend_Data>
                    <my:Amend_Start_Date>2012-09-16</my:Amend_Start_Date>
                    <my:Amend_End_Date>2012-09-21</my:Amend_End_Date>
                </my:Amend_Data>
            </my:Amend_Info_Repeater>
            <my:Amend_Info_Repeater>
                <my:Amend_Data>
                    <my:Amend_Start_Date>2012-09-23</my:Amend_Start_Date>
                    <my:Amend_End_Date>2012-09-27</my:Amend_End_Date>
                </my:Amend_Data>
            </my:Amend_Info_Repeater>
        </my:Amend_Info_Repeater_Group>
    </my:Amend_Hider>
</my:MasterSection>

我上周四开始使用 XPath ......如果我需要用勺子喂食,请原谅我。就目前而言,列出的表达式返回示例 XML 中的所有开始日期节点。它旨在返回“最新” Amend_Start_Date,但不是因为 XML 的结构使得Amend_Start_Date节点没有组合在一起。在这个例子中,这意味着一个正确的表达式将返回一个开始日期2012-09-23不是 2012-09-16

一定有办法做到这一点!必须以某种Amend_Data方式修改节点的相对路径......感谢任何帮助!

PS:这与我周五发布的一个问题有关,可以在这里找到。您可能会注意到该问题与此问题中列出的示例 XML 的结构差异。

4

3 回答 3

3

这:

(//my:Amend_Data)[last()]//my:Amend_Start_Date 

应该做的伎俩。

不使用last()您可以尝试:

//my:Amend_Info_Repeater[0=count(following-sibling::my:Amend_Info_Repeater)]/my:Amend_Data/my:Amend_Start_Date 
于 2012-09-11T19:10:20.817 回答
1

使用

(//my:Amend_Start_Date)[last()]

my:Amend_Start_Date这将选择XML 文档中所有元素的最后一个(按文档顺序) 。

更新

如果由于 InfoPath 的 XPath 实现中的一些错误/不合规性,上述表达式无法成功/正确评估,请尝试:

//my:Amend_Start_Date
    [not(preceding::my:Amend_Start_Date or ancestor::my:Amend_Start_Date)]
于 2012-09-12T13:02:47.273 回答
0

我没有在一个 xpath 中得到它,但也许 xslt 有帮助。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-05-05T19:56:08">
    <xsl:output method = "text" indent="yes"/>

    <xsl:variable name="y" select="//my:Amend_Data"/>
    <xsl:variable name="x" select="$y[count($y)]/my:Amend_Start_Date"/>

  <xsl:template match="/">
        <xsl:value-of select="$x"/>
  </xsl:template>
</xsl:stylesheet>
于 2012-09-11T18:41:21.633 回答