2012-08-08 117 views
1

我有下面的XML:XSLT XPath查詢

<response> 
    <propertySearchSales>                   
    <properties rentalperiod="0"><pages page="1" count="153" pageCount="16" perPage="10"> 
     <pages page="1" count="153" pageCount="16" perPage="10"> 
      <page number="1" selected="true"/> 

我試圖訪問頁面數屬性值與下面的XSLT代碼:

<xsl:if test="//response//propertySearchSales//properties/pages/@number>1"> 

但它不工作,我算什麼我做錯了? 感謝

+1

示例XML具有嵌套在'pages'element內的'pages'元素 - 是正確的?這將解釋爲什麼你的XPath找不到'page'元素。 – 2012-08-08 11:21:46

回答

1

我想訪問的頁面數量屬性值與 以下xslt代碼:

<xsl:if test="//response//propertySearchSales//properties/pages/@number>1"> 

xsl:if指令沒有「訪問」的任何節點 - 它確定如果條件爲true()false()

的XPath表達式選擇滿足以下條件的具有內部的條件節點謂詞

因此,上面的XPath表達式需要進行修改,以這樣的事:

(ExpressionSelectingNodes)[//response//propertySearchSales//properties/pages/@number>1] 

至於其他人已經注意到,所提供的XML文檔中的pages元素沒有任何number屬性

因此,最有可能你需要這樣的表達式:

(ExpressionSelectingNodes)[//response//propertySearchSales//properties/pages/page/@number>1] 

如果您需要選擇任何page,其number屬性的字符串值,作爲數字處理,比數1,使用更大

//response//propertySearchSales//properties/pages/page/[@number>1] 

最後,基於所提供的XML文檔時,上述表達式可以被優化爲:

/response/propertySearchSales/properties/pages/page/[@number>1] 
+0

+1「xsl:if」的解釋和比我更全面的答案! – 2012-08-08 12:58:52

+0

@MattJones,不客氣。我也應該說,應該避免顯式的XSLT條件,比如'xsl:if',而不是模板匹配模式。 – 2012-08-08 13:17:42

0

試試這個

/response/propertySearchSales/properties/pages/page[@number>1] 
0

如果你的示例XML是正確的,那麼你的XPath是錯誤的,由於pages具有pages子元素。

爲您提供的XML這應該工作:

<xsl:if test="//response/propertySearchSales/properties/pages/pages/page[@number>1]"> 

如果附加pages元素是一個錯誤,試試這個:

<xsl:if test="//response/propertySearchSales/properties/pages/page[@number>1]"> 
0

簡單的方法是

<xsl:if test="//page[@number>1]">