2011-12-28 20 views
0

使用xpath的方法A的Schema讀取並映射無界節點(「detail」)正在輸出多個消息。唯一的問題是設計xsd模式時,無界節點必須始終處於一個序列中。 在我使用,我想讀和地圖信息分配對象,實例XPath是xpath - 如何讓方法B工作?

XPathVar = System.String.Format(「 
    /* [local-name()=’header’ and namespace-uri()=’http://namespace’] 
    /* [local-name()=’detail’ and namespace-uri()=’http://namespace’] and 
    position() = {0}]」, nLoopCount) 

如果我沒有detail節點header節點後直比失敗拋出類似的異常到'在構建塊'的末端包含空值。有什麼辦法讓方法B工作? 即

此方法有效!

[Method A] 
    <schema> 
     <header> (Node) 
      <detail> (Node) unbounded 
      <child elements> 
      </detail> 
      <additional info> (Node) 
      <child elements> 
      </additional info> 
     </header> 

但這不起作用並拋出類似於「在構造塊的端部包含一個空值」的異常

[Method B] 
    <schema> 
     <header> (Node) 
     <additional info> (Node) 
      <child elements> 
     </additional info> 
     <detail> (Node) unbounded 
      <child elements> 
     </detail> 
     </header> 

如果有其它的元件或節點分離<頭>和模式中的<>詳細信息>我得到異常錯誤。

任何人都可以解決這個問題?

+0

XPath表達式甚至不是有效的。 – 2011-12-28 19:46:18

回答

1

認爲要使用此:

XPathVar = System.String.Format(「 
    /* [local-name()=’header’ and namespace-uri()=’http://namespace’] 
    /* [local-name()=’detail’ and namespace-uri()=’http://namespace’] 
     [position() = {0}]」, nLoopCount) 

說明:下往往選擇相當於集:

/*[condition1 and condition2] 
/*[condition1][condition2] 

然而,在使用時position這打破了。考慮以下表達式:

/*[condition1 and position()=1] 

它選擇的所有元素爲其兩個以下的爲真:

  • condition1爲真
  • 該元素的上下文位置等於一個

但是,該表達式:

/*[condition1][position()=1] 

... 第一選擇用於其condition1是真實的,然後取第一個這樣的元素的所有元素。

這是一個微妙但重要的區別。

+0

嗨Iwburk,解決問題,謝謝! – Chrisk 2011-12-30 12:48:48