使用多个索引绑定到XAML中的XML文档
我正在绑定到XAML TextBlock语句中的XML文档,以下是我的XML文档:使用多个索引绑定到XAML中的XML文档,xml,wpf,xaml,xpath,data-binding,Xml,Wpf,Xaml,Xpath,Data Binding,我正在绑定到XAML TextBlock语句中的XML文档,以下是我的XML文档: <Library> <Category Name="fiction"> <Author Name="john Doe"> <Book Title="Book A"/> <Book Title="Book B"/> </Author> <
<Library>
<Category Name="fiction">
<Author Name="john Doe">
<Book Title="Book A"/>
<Book Title="Book B"/>
</Author>
<Author Name="Jane Doe"/>
</Category>
<Category Name="non-fiction"/>
<Category Name="reference"/>
</Library>
有人能告诉我正确的语法吗?理想情况下,我希望能够通过名称而不是索引指定作者。比如:
Text="{Binding XPath=((/Library/Category/Author)[@Name='john Doe']/Book)[1]/@Title}" // Empty
根据发布的XML示例,
Book
elmeents不是Author
的孩子,而是兄弟姐妹。因此,在本例中,您应该使用以下同级轴:
/Library/Category/Author[1]/following sibling::Book[1]/@Title
/Library/Category/Author[@Name='john Doe']/following sibling::Book[1]/@Title
*Book
元素放在相应的Author
父元素中。使用XPath更容易处理这种结构
<Library>
<Category Name="fiction">
<Author Name="john Doe">
<Book Title="Book A"/>
<Book Title="Book B"/>
</Author>
<Author Name="Jane Doe"/>
</Category>
<Category Name="non-fiction"/>
<Category Name="reference"/>
</Library>
以及更正后的XML的XPath:
/Library/Category/Author[1]/Book[1]/@Title
/Library/Category/Author[@Name='john Doe']/Book[1]/@Title
**:注意XML和XPath是区分大小写的,这里我假设您有
'john Doe'
而不是正确的大小写'john Doe'
根据发布的XML示例,Book
elmeents不是作者的孩子,而是兄弟姐妹。因此,在本例中,您应该使用以下同级轴:
/Library/Category/Author[1]/following sibling::Book[1]/@Title
/Library/Category/Author[@Name='john Doe']/following sibling::Book[1]/@Title
*
无论如何,如果可能的话,我建议更改XML结构。将Book
元素放在相应的Author
父元素中。使用XPath更容易处理这种结构
<Library>
<Category Name="fiction">
<Author Name="john Doe">
<Book Title="Book A"/>
<Book Title="Book B"/>
</Author>
<Author Name="Jane Doe"/>
</Category>
<Category Name="non-fiction"/>
<Category Name="reference"/>
</Library>
以及更正后的XML的XPath:
/Library/Category/Author[1]/Book[1]/@Title
/Library/Category/Author[@Name='john Doe']/Book[1]/@Title
*
*:注意XML和XPath是区分大小写的,这里我假设您使用的是'john Doe'
,而不是正确的大小写'john Doe'
,谢谢,我更改了您列出的XML结构,因为将book元素作为子元素是我的初衷。但是,在进行了更正(并修复了“john”的情况)之后,仍然没有显示任何XPath语句可以工作。其中任何一项似乎正确吗?@TedN/Library/Category/Author[@Name='john Doe']/Book[1]/@Title
。根据我的答案中的XML进行了测试并成功了。它将在那里工作,但不会在绑定语句的上下文中工作。例如:不工作并给出语法错误。因此,我尝试了许多不同的格式,如上图所示。@TedN在这种情况下,您需要转义一些字符,请参阅或使用转义字符是问题的关键文本=“{Binding XPath=/Library/Category/Author[@Name\=\'john Doe\']]/Book[1]/@Title}”您能将此转换为并回答,以便我能将您的答案标记为正确吗?谢谢,正如您所列,我更改了XML结构,因为将book元素作为子元素是我的初衷。但是,在进行了更正(并修复了“john”的情况)之后,仍然没有显示任何XPath语句可以工作。其中任何一项似乎正确吗?@TedN/Library/Category/Author[@Name='john Doe']/Book[1]/@Title
。根据我的答案中的XML进行了测试并成功了。它将在那里工作,但不会在绑定语句的上下文中工作。例如:不工作并给出语法错误。因此,我尝试了许多不同的格式,如上图所示。@TedN在这种情况下,您需要转义一些字符,请参阅或使用转义字符是问题的关键文本=“{Binding XPath=/Library/Category/Author[@Name\=\'john Doe\']]/Book[1]/@Title}”您能将此转换为并回答,以便我能将您的答案标记为正确吗?