当你在Entity Framework中序列化对象时,只有该对象的第一个实例被序列化,之后对同一个对象的引用将指向第一个实例。我无法获得正确的xpath来获取第一个实例的句柄,因此我可以读取它的属性。例如,让我们说我有这个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" />
但是当我到达第二个卡车节点时,轮胎节点只是第一个轮胎节点的参考,因为它们实际上是相同的轮胎对象。
我遇到问题的部分是提出将在z:Ref
属性值中读取的xpath,如果存在则获取它指向的节点并使用它,否则使用该节点这是完全序列化的。
答案 0 :(得分: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" />