属性& # 39;xmlns # 39;元素导致XmlDataProvider不读取该节点
本文关键字:读取 节点 XmlDataProvider 元素 xmlns 属性 | 更新日期: 2023-09-27 18:09:51
我试图在xaml中读取和解析xml文件,我遇到了障碍,因为xml文件中的一个元素(teststandfileheader)包含'xmlns'的属性,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<teststandfileheader type="Globals" xmlns="http://www.ni.com/TestStand/14.0.0/PropertyObjectFile">
Test
<typelist />
<Data classname="Obj">
<subprops>
<DEVBOARD classname="Bool">
<value>false</value>
</DEVBOARD>
<DEVICES_PRESENT_HW classname="Bool">
<value>true</value>
</DEVICES_PRESENT_HW>
</subprops>
</Data>
</teststandfileheader>
当我将XPath设置为'/'时,我将获得与所有元素相关联的所有文本。只要我尝试将XPath设置为等于或低于'teststandfileheader'级别的内容,我就得不到任何数据作为返回。
这里是XAML:<Window x:Class="DOTSDebugSelector.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tb="http://www.hardcodet.net/taskbar"
xmlns:local="clr-namespace:DOTSDebugSelector"
Title="MainWindow" Height="350" Width="525" Visibility="Visible" WindowStyle="ToolWindow">
<Window.Resources>
<XmlDataProvider x:Key="TsStationGlobals" x:Name="TsStationGlobals" XPath="/teststandfileheader/Data/subprops" Source="C:'ProgramData'National Instruments'TestStand 2014 (32-bit)'Cfg'StationGlobalsdebug.ini" IsInitialLoadEnabled="True" IsAsynchronous="False">
</XmlDataProvider>
<local:TextToBoolConverter x:Key="BoolConverter"/>
<ContextMenu x:Key="MyMenu">
<CheckBox Content="USING DEV BOARD" Checked="DevBoard_Checked" IsChecked="{Binding Source={StaticResource TsStationGlobals}, Converter={StaticResource BoolConverter}, UpdateSourceTrigger=PropertyChanged, XPath=DEVBOARD/@value}"></CheckBox>
<CheckBox Content="USING TEST HARDWARE" Checked="TestHardware_Checked" IsChecked="{Binding Source={StaticResource TsStationGlobals}, Converter={StaticResource BoolConverter}, UpdateSourceTrigger=PropertyChanged, XPath=DEVICES_PRESENT_HW/@value}"></CheckBox>
</ContextMenu>
</Window.Resources>
<Grid>
<tb:TaskbarIcon IconSource="DOTSIcon.ico" ToolTipText="Click to Setup DOTS Debug Mode" MenuActivation="RightClick" ContextMenu="{StaticResource MyMenu}" />
<TextBox HorizontalAlignment="Left" Height="22" Margin="222,124,0,0" TextWrapping="Wrap" Text="{Binding Source={StaticResource TsStationGlobals}, UpdateSourceTrigger=PropertyChanged, XPath=DEVBOARD}" VerticalAlignment="Top" Width="74"/>
<TextBox HorizontalAlignment="Left" Height="22" Margin="222,151,0,0" TextWrapping="Wrap" Text="{Binding Source={StaticResource TsStationGlobals}, UpdateSourceTrigger=PropertyChanged, XPath=DEVICES_PRESENT_HW}" VerticalAlignment="Top" Width="74"/>
</Grid>
</Window>
如果我将XML文件中的属性删除(甚至重命名)为'xmlns'以外的东西,那么一切都按预期工作。对于为什么会发生这种情况以及如何纠正有什么建议吗?还要注意,我不控制XML文件的格式,所以有问题的属性必须保留。
需要在XPath表达式中使用名称空间—当前表达式不正确,因为没有具有该完全限定名称的元素。
例如,将名称空间映射到前缀p
,并将其包含在XPath中:
<XmlDataProvider XPath="/p:teststandfileheader/p:Data/p:subprops" Source="...">
<XmlDataProvider.XmlNamespaceManager>
<XmlNamespaceMappingCollection>
<XmlNamespaceMapping
Uri="http://www.ni.com/TestStand/14.0.0/PropertyObjectFile"
Prefix="p" />
</XmlNamespaceMappingCollection>
</XmlDataProvider.XmlNamespaceManager>
</XmlDataProvider>