XSLT相对路径

时间:2017-10-01 06:52:43

标签: xslt-2.0

我的xml以下。

<MpGroup>
<MpGroupItem>
        <MeasurePoints>
            <MeasurePointItem>
                <Measures>
                    <MeasureItem>
                        <Name>xyz</Name>
                        <Result>2</Result>

                    </MeasureItem>
                    <MeasureItem>
                        <Name>rty</Name>
                        <Result>2</Result>

                    </MeasureItem>
                </Measures>
                <MeasureLimit>
                    <CurveLimit>
                        <CurveLimitItem>
                            <X>1</X>
                            <Y1>1</Y1>
                            <Y2>1</Y2>
                        </CurveLimitItem>
                        <CurveLimitItem>
                            <X>2</X>
                            <Y1>1</Y1>
                            <Y2>1</Y2>
                        </CurveLimitItem>
                    </CurveLimit>

                    <CurveYUnit></CurveYUnit>
                </MeasureLimit>


            </MeasurePointItem>
        </MeasurePoints>
        <Name>ABC</Name>

 </MpGroupItem>

我在MeasureItem中,从那里我需要获取MpGroup / MpGroupItem / Name的值。我不想使用xpath。我想使用相对路径,如//../../../../ Name。

我有以下xslt代码,但没有工作。

                     <xsl:for-each select="MpGroups/MpGroupItem">

                    <xsl:for-each select="MeasurePoints/MeasurePointItem">
                         <xsl:if test="Measures != ''">
                            <xsl:for-each select="Measures/MeasureItem">
                                <InputValue><xsl:value-of select="normalize-space(//../../../../Name)"/></InputValue>
                            </xsl:for-each>
                        </xsl:if>
                        <xsl:if test="Measures = ''">
                             <InputValue><xsl:value-of select="normalize-space(//../../Name)"/></InputValue>
                         </xsl:if>  


                  </xsl:for-each>
                  </xsl:for-each>

任何人都可以让我知道如何使用相对路径而不是xpath。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您的问题标记为XSLT但是说“不想使用xpath”来选择值没有意义,因为XPath是XSLT中用于从输入XML文档中选择值的语言。

对我而言,听起来好像您想从ancestor::MpGroup/MpGroupItem/Name元素直接导航到ancestor::MpGroupItem/Name或更多MeasureItem

答案 1 :(得分:0)

当明显的方法是你说你不想使用而没有给出理由时,它有点难以回答。这意味着我们想知道您更喜欢一种解决方案而不是另一种解决方案的标准。

由于您提供给我们的XML不完整(最外层元素没有结束标记),或许您在文档中实际上有多个MpGroupItem,并且您正在寻找{ &#34;当前&#34;中的{1}}元素Name(即上下文项的MpGroupItem容器)。如果是这种情况(并且这是一个疯狂的猜测),那么最合适的XPath表达式可能是MpGroupItem。如果您愿意,可以使用ancestor::MpGroupItem/Name,但它的可读性和可靠性较低。在这条路径的开头使用../../../Name肯定是错误的。