需要从其他节点属性获取对xml节点的引用

时间:2013-04-16 23:26:11

标签: entity-framework xpath

当你在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,如果存在则获取它指向的节点并使用它,否则使用该节点这是完全序列化的。

1 个答案:

答案 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" />