在XPath绑定WPF中转义单引号

时间:2014-10-16 04:39:37

标签: c# wpf xpath

我有一个问题,我需要能够在XAML绑定中使用XPath,而我正在进行的比较中可以有单引号或撇号(以及双引号)

这是我的XAML - 我试图将Text绑定为元素的 Value 属性,其中 Name 属性为“Field'end”:

<Canvas Width="9.5cm" Height="6.5cm" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="RootCanvas2">
  <Canvas.Resources>
    <XmlDataProvider x:Key="UserData" XPath="User" Source="MockUser.xml"></XmlDataProvider>
  </Canvas.Resources>
  <Viewbox StretchDirection="DownOnly" VerticalAlignment="Center" HorizontalAlignment="Left" Canvas.Top="1.0cm" Canvas.Left="0.0cm" Width="3.0cm" Height="0.8cm" >
    <TextBlock Text="{Binding Source={StaticResource UserData}, XPath=Fields/Field[@Name\=\'Field \&apos; end\']/@Value}" />
  </Viewbox>
</Canvas>

以下是我正在使用的XML示例。

<?xml version="1.0" encoding="utf-8" ?>
<User>
  <Fields>
   <Field Name="Last Name" Value="Smith" />
   <Field Name="First Name" Value="John" />
   <Field Name="Personnel ID" Value="000001" />
   <Field Name="Field &quot;quote&quot;" Value="000021" />
   <Field Name="Field ' end" Value="000056" />
 </Fields>
</User>

问题是我无法在XAML中包含的XPath中正确转义'。

我尝试过使用concat(似乎不可用,或任何其他功能),逃避\',只是有'等等似乎没什么用。有什么想法吗?

对于某些背景,我无法更改数据的机制。用户数据将始终以XML格式提供,作为XmlDataProvider。

我能用类似的双引号来表达:

<Viewbox StretchDirection="DownOnly" VerticalAlignment="Center" HorizontalAlignment="Left" Canvas.Top="0.0cm" Canvas.Left="0.0cm" Width="3.0cm" Height="0.8cm" >
  <TextBlock Text="{Binding Source={StaticResource UserData}, XPath=Fields/Field[@Name\=\'Field \&quot;quote\&quot;\']/@Value}" />
</Viewbox> 

在这种情况下,有没有办法逃避单一报价?

1 个答案:

答案 0 :(得分:3)

要使用XPath搜索包含引号的某些值,您必须使用Binding的元素语法,以便XPath可以设置为如下属性:

<TextBlock>
    <TextBlock.Text>
       <Binding Source="{StaticResource UserData}" 
                XPath="Fields/Field[@Name=&quot;Field ' end&quot;]/@Value"/>
    </TextBlock.Text>
</TextBlock>