以下是xml,
中输入文本标记的示例<Root>
<Items>
<Content>
<ContentControl>
<Grid>
<Image Tag="And" ToolTip="And"/>
<TextBox Tag="Num1">12</TextBox>
<TextBox Tag="Num2">15</TextBox>
</Grid>
</ContentControl>
</Content>
<Content>
<ContentControl>
<Grid>
<Image Tag="Button Pressed" ToolTip="Button Pressed"/>
<ComboBox IsDropDownOpen="False" Text="4" Tag="Num2">
<ComboBoxItem>0</ComboBoxItem>
<ComboBoxItem>1</ComboBoxItem>
<ComboBoxItem>2</ComboBoxItem>
<ComboBoxItem IsSelected="True">4</ComboBoxItem>
</ComboBox>
</Grid>
</ContentControl>
</Content>
</Items>
</Root>
我需要使用C#单独读取输入到文本框和组合框中的输入。
如何确定哪个输入元素来自读取附加到它们的标签?以及在确定了要提取的输入数据后,如何分别从文本框和组合框输入中提取数据?
例如,在标记为“Num1”的文本框中,我想提取值12,并从我想要提取值4的所选项目的组合框中提取。
答案 0 :(得分:1)
我不确定我是否理解你要实现的最终目标。
无论如何,这演示了如何实现&#34; 中提到的内容,例如&#34;这个问题的一节。这使用XDocument
和XPath查询从标记的文本框中选择值12&#39; Num1&#39;和组合框所选项目的值4:
var doc = XDocument.Load("path_to_xml_file.xml");
var textBoxValue
= (string) doc.
XPathSelectElement("/Root/Items/Content/ContentControl/Grid/TextBox[@Tag='Num1']");
var comboBoxValue
= (string)doc
.XPathSelectElement("/Root/Items/Content/ContentControl/Grid/ComboBox[@Tag='Num2']/ComboBoxItem[@IsSelected='True']");
更新:
如果您在XML中的某处声明了默认名称空间,则默认名称空间中声明默认名称空间的XML元素及其所有后代都在默认名称空间中考虑。但另一方面,没有考虑前缀的XPath查询中的所有元素都没有命名空间。
为了弥合这种差异,你需要
XmlNamespaceManager
XmlNamespaceManager
作为XPathSelectElement
方法例如,假设从<Root>
元素声明的默认命名空间:
var namespaceManager = new XmlNamespaceManager(new NameTable());
namespaceManager.AddNamespace("ns", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
var textBoxValue
= (string)doc.
XPathSelectElement(
"/ns:Root/ns:Items/ns:Content/ns:ContentControl/ns:Grid/ns:TextBox[@Tag='Num1']"
, namespaceManager);