2014-01-26 74 views
2

我正在处理文档中的节点列表,一次一个节点。如何在主文档中找到一个属性值等于当前所选节点属性值的节点

在该处理过程中,我需要使用正在处理的节点的本地属性的值从更宽的文档中选择节点。

我希望在单个XPath中表达这一点。

如果我第一次得到本地属性值,我可以将它插入到xpath中,但我不希望这样做,因为我希望Xpath是自包含的。

以下文档是一种结构类型的示例,但仅供说明。

<root> 
    <pageGenre> 
     <page ref="attvalue1"/> 
     <genre>horror</genre> 
    </pageGenre> 
    <pageGenre> 
     <page ref="attvalue1"/> 
     <genre>thriller</genre> 
    </pageGenre> 
    <pageGenre> 
     <page ref="attvalue2"/> 
     <genre>cooking</genre> 
    </pageGenre> 
    <book att="attvalue1"> 
     <author>Lovecraft</author> 
    </book> 
    <book att="attvalue2"> 
     <author>E.E. Smith</author> 
    </book> 
</root> 

我第一次从文档中找到我的节点列表有:

.//book

然后对每本书节点,我使用节点然后得到的att

./@att

它每次都有效。

我想要做的就是通过单个Xpath获取本书的所有页面风格。

我曾尝试:

// pageGenre /页[@ref = ./@att]/../genre

这是不行的,来了空白。

如果我使用

[@ref = // @ ATT]

我刚刚得到的所有类型的所有书att S上的文件内。

如果我首先解决./@att值然后编写我的Xpath,它工作正常,但我不想“知道”这需要完成,因为我希望XPath的列表在没有任何特殊的情况下运行使用通用调度程序的案例。

我也尝试过self::/@att,但这和./@att一样,正如人们所期望的那样。

任何想法非常感谢。

+0

,所以你要选择的''''具有ref属性值等于..?请继续判刑。我不能清楚地了解你正在尝试从XML – har07

+0

得到我想要有等于当前book节点的ATT ref属性值来选择的。 –

+0

因为书节点在不同的树,我不能让你通过*当前图书节点*的意思是什么(很显然,如果''节点在同一棵树作为'')。通过修复xml结构顺利移动。 – har07

回答

0

您希望从单个节点启动XPath查询并对其进行反向引用(以获取值att),但在函数中没有bulit。以下问题是有点确认。

“我可以看到完成您在注释中描述的内容的唯一方法是使用LINQ to XML,XPath变量或定义您自己的current()函数”。[.NET XPath starting from a specific element and backreferencing to it]

而且我们的试一下:

//pageGenre/page[@ref = ./@att]/../genre 

因为./@att是选择att属性相对于当前节点,这是<page>而不是<book>没有工作。要引用该部分中的<book>节点,您需要使用current()函数。

最后,解决方案是实现上述链接中提供的3种方法之一,或者如果所有这些方法都过于复杂/过度消耗,只需在每个开头保存att的值迭代。

+1

感谢您的链接 - 我会看看我是否可以利用VariableContext路线。 –

相关问题