2013-04-16 110 views
0

當您在實體框架中序列化對象時,只有該對象的第一個實例被序列化,之後對同一對象的引用將指向第一個實例。我無法獲得正確的xpath來獲取第一個實例的句柄,因此我可以讀取它的屬性。例如,假設我有這個xml:需要從其他節點屬性獲取對xml節點的引用

<a:root> 
<a:truck> 
    <a:truck> 
     <a:name>truck1</a:name> 
     <a:tire> 
      <a:tire z:Id="i1"> 
       <a:height>35</a:height> 
       <a:width>12.5</a:width> 
      </a:tire> 
     </a:tire> 
    </a:truck> 
    <a:truck> 
     <a:name>truck2</a:name> 
     <a:tire> 
      <a:tire z:Ref="i1" /> 
     </a:tire> 
    </a:truck> 
</a:truck> 
</a:root> 

我正在循環卡車節點,我想要得到輪胎高度。在它是非常簡單的第一種情況下,我可以這樣做:

<xsl:value-of select="a:tire/a:tire/a:height" /> 

,但是當我到了第二輛卡車節點輪胎節點僅僅是第一個輪胎節點的引用,因爲它們實際上是相同的輪胎目的。

我遇到問題的部分是xpath,它將讀取z:Ref屬性值,如果存在,則獲取指向並使用該節點的節點,否則使用完全序列化的節點。

回答

0

我先定義鍵:

<xsl:key name="ref" match="a:tire" use="@z:Id"/> 

然後代替<xsl:value-of select="a:tire/a:tire/a:height" />可以使用

<xsl:value-of select="a:tire/a:tire[not(@z:Ref)]/a:height | key('ref', a:tire/a:tire/@z:Ref)/a:height" /> 
+0

我需要這正是。唯一的障礙是記住添加命名空間: xmlns:z =「http://schemas.microsoft.com/2003/10/Serialization/ – user2288522