2017-12-09 14 views
0

次のXMLでは、最上位レベルがすべてのレベルのノードを返しています。トップレベルの祖先はいないので、なぜ私はそれが子どもになるのですか?上位レベルの先祖または自己の問題

XML 
<?xml version="1.0" encoding="ISO-8859-1"?> 
<WBSs> 
<WBS GUID="2"> 
<Name>work</Name> 
<WBSs> 
<WBS GUID="1"> 
<Name>Wall</Name> 
<ParentWBS>2</ParentWBS> 
</WBS> 
<WBS GUID="2"> 
<Name>South Wall</Name> 
<ParentWBS>2</ParentWBS> 
</WBS> 
<WBS GUID="3"> 
<Name>North Wall</Name> 
<ParentWBS>2</ParentWBS> 
</WBS> 
</WBSs> 
</WBS> 
</WBSs> 

XPATH 注:テンプレートを適用.//WBS

<xsl:variable name="wbsCode" select=".//ancestor-or-self::WBS/@GUID[1]"/> 

注にある:私はすぐにノードをstrinifyと含むようにXPath式を次のXSLT命令を持っています「」。

結果

2.1.2.3

2.1

2.2

2.3

所望の結果

2.1

2.2

2.3

<xsl:variable name="WBS_ELEMENT_TABLE"> 
    <xsl:apply-templates select=".//WBS" mode="I_WBS_ELEMENT"> 
    <xsl:with-param name="ProjectId" select="$ProjectId"/> 
    </xsl:apply-templates> 
</xsl:variable> 

<xsl:template match="WBS" mode="I_WBS_ELEMENT"> 
    <xsl:param name="ProjectId"/> 

<xsl:variable name="wbsCode" select=".//ancestor-or-self::WBS/@GUID[1]"/> 

<xsl:variable name="temp2" select="string-join(($wbsCode), '.')"/> 

<WBS_ELEMENT> 
    <xsl:value-of select="$temp2"/> 
</WBS_ELEMENT> 

</xsl:template> 
+0

*テンプレートの適用... *と*の直後に... *のXSLT命令があります。あなたの問題を示す[mcve]に実数のコードを作成してください。ありがとう。 – kjhughes

+0

これは、関連するxsltコードです...残念です。 – Jkoul

+0

XSLTが上に追加されました...申し訳ありませんが、XPATHの問題として開始されました。 – Jkoul

答えて

0

// XSLTので//ancestor::*がすべての子孫のすべての祖先、すなわちすべてを見つけ./descendant-or-self::node()/ancestor::xを意味し、/descendant-or-self::node()/を意味します。

//の意味は何も考えずにその習慣から脱出してください!

関連する問題