0

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

4

1 回答 1

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" />
于 2013-04-17T11:23:18.660 回答