Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用多个索引绑定到XAML中的XML文档_Xml_Wpf_Xaml_Xpath_Data Binding - Fatal编程技术网

使用多个索引绑定到XAML中的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> <

我正在绑定到XAML TextBlock语句中的XML文档,以下是我的XML文档:

<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
    *

  • 无论如何,如果可能的话,我建议更改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
    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}”您能将此转换为并回答,以便我能将您的答案标记为正确吗?