【问题标题】:Escaping single quote in XPath Binding WPF在 XPath Binding WPF 中转义单引号
【发布时间】:2014-10-16 04:39:36
【问题描述】:

当我进行的比较中可以有单引号或撇号(以及双引号)时,我需要能够在 XAML 绑定中使用 XPath

这是我的 XAML - 我正在尝试将 Text 绑定为元素的 Value 属性与“Field ' end”的 Name 属性:

<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 (似乎不可用,或任何其他功能),使用 \' 转义,仅使用 ' 等。似乎没有任何效果。有什么想法吗?

对于某些背景,我没有能力更改数据的机制。用户数据将始终作为 XmlDataProvider 以 XML 形式提供。

我可以用双引号来做类似的事情:

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

有没有办法在这种情况下转义单引号?

【问题讨论】:

    标签: c# wpf xpath


    【解决方案1】:

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

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

    【讨论】:

    • 我尝试了您的回答并收到以下错误消息:错误 1 ​​标记扩展中的名称和值不能包含引号。 MarkupExtension 参数 'Source={StaticResource UserData}, XPath=Fields/Field[@Name\="Field ' end"]/@Value}' 无效。第 9 行位置 20。\visual studio 2013\Projects\WpfApplication1\WpfApplication1\MainWindow.xaml 9 20 WpfApplication1
    • @nwhite 你确定你试过我的代码吗? Binding 不应设置为 inline,它应设置为独立元素(参见我的代码)。
    • 你是对的。工作正常。刚才要解决这个古老的问题 - 我正在阅读“哈利波特”。对不起,我第一次检查时正在运行我现有的代码。
    • 我想为你的答案投票,但由于没有足够的代表而不能投票。
    猜你喜欢
    • 2020-04-09
    • 2019-04-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 2011-10-04
    相关资源
    最近更新 更多