C# 名称不能以';1';字符,十六进制值0x31。从xml文件读取时
我使用一个xml文件来读取内容,并将其显示在带有复选框的树状视图列表中。这样做的条件是,应该根据用户在组合框中选择的内容显示内容。假设用户在组合框中选择了2,那么treeview列表应该显示2的内容(来自xml文件)。我试过像:C# 名称不能以';1';字符,十六进制值0x31。从xml文件读取时,c#,xml,winforms,linq,C#,Xml,Winforms,Linq,我使用一个xml文件来读取内容,并将其显示在带有复选框的树状视图列表中。这样做的条件是,应该根据用户在组合框中选择的内容显示内容。假设用户在组合框中选择了2,那么treeview列表应该显示2的内容(来自xml文件)。我试过像: private void pjctsel_cmbbox_SelectedIndexChanged(object sender, EventArgs e) { var xmldoc = File.ReadAllText(@"D:\\test
private void pjctsel_cmbbox_SelectedIndexChanged(object sender, EventArgs e)
{
var xmldoc = File.ReadAllText(@"D:\\test.xml");
var str = XElement.Parse(xmldoc);
cmbbox_val = pjctsel_cmbbox.SelectedIndex.ToString();
*** var res = str.Elements(cmbbox_val).Where(x => x.Element("general").Value.Equals(cmbbox_val)).ToList();
MessageBox.Show(res.ToString());
}
cmbbox_val = user selected value from combobox.
xmlfile内容是:
<serv>
<general name="one">
<server name="oneone">
<service name="1143"/>
<service name="1142"/>
</server>
</general>
<general name="two">
<server name ="twoone">
<service name="2143"/>
<service name="2142"/>
</server>
</general>
</serv>
在我的c#代码中,我标记了*我得到了以下异常“名称不能以'1'字符开头,十六进制值0x31。”
谷歌搜索了它,但我只能找到那些以标记字符串1开始xml文件的人
有什么想法吗
如果您有任何想法,我们将不胜感激
编辑:
我的组合框有1,2这样的值
我尝试的是,如果用户在组合框中选择值2,那么我的应用程序需要在xml文件中检查名称为2的条目,如果找到任何匹配项,那么与这两个节点对应的“服务器名称”节点和“服务名称”节点必须显示在树视图列表中
希望这有意义
cmbbox_val = pjctsel_cmbbox.SelectedIndex.ToString(); // SelectedIndex is an integer
var res = str
.Elements(cmbbox_val) // so this will fail
.Where(x => x.Element("general")
.Value.Equals(cmbbox_val)).ToList();
这可能会奏效:
cmbbox_val = pjctsel_cmbbox.SelectedItem.ToString(); // or SelectedItem.SomeProperty
但我还注意到,您正在查找
cmbbox\u val
2次,并且Element(“general”)
已经是XML的根。所以这不起作用,但我们没有信息来修复它
编辑后:
cmbbox_val = pjctsel_cmbbox.SelectedItem.ToString(); // or SelectedItem.SomeProperty
但我还注意到,您正在查找
cmbbox\u val
2次,并且Element(“general”)
已经是XML的根。所以这不起作用,但我们没有信息来修复它
编辑后:
1
开头,因为您正在为元素()传递cmbbox\u val
,因此会出现该错误
您正在使用该cmbbox\u val
作为值。Equals
和节点选择器:我打赌它包含字符串“1143”
,根据MSDN,它将表示要选择的元素名称的字符串作为参数。名称不能以1
开头,因为您正在为元素()传递cmbbox\u val
,因此会出现该错误
您正在使用该cmbbox\u val
作为值。Equals
和节点选择器:我打赌它包含字符串“1143”
问题是您正在将整数作为XElement
名称传递。名称不应以数字开头。可能的错误是,您在代码中传递了组合框。SelectedIndex
。如果已正确配置组合框(即1,“1”2,“2”),则应通过组合框。SelectedValue
。如果未填写组合框的值列表,则可以将代码更改为:
private void pjctsel_cmbbox_SelectedIndexChanged(object sender, EventArgs e)
{
var xmldoc = File.ReadAllText(@"D:\\test.xml");
var str = XElement.Parse(xmldoc);
string cmbbox_val = pjctsel_cmbbox.SelectedIndex==0 ? "one" : "two";
var res = str.Elements(cmbbox_val).Where(x => x.Element("general").Value.Equals(cmbbox_val)).ToList();
MessageBox.Show(res.ToString());
}
问题是您正在将一个整数
作为XElement
名称
传递。名称不应以数字开头。可能的错误是在代码中传递组合框。选择了索引
。如果您正确配置了组合框(即1,“1”2,“2”)您应该通过组合框。SelectedValue
。如果不填写组合框的值列表,则可以将代码更改为:
private void pjctsel_cmbbox_SelectedIndexChanged(object sender, EventArgs e)
{
var xmldoc = File.ReadAllText(@"D:\\test.xml");
var str = XElement.Parse(xmldoc);
string cmbbox_val = pjctsel_cmbbox.SelectedIndex==0 ? "one" : "two";
var res = str.Elements(cmbbox_val).Where(x => x.Element("general").Value.Equals(cmbbox_val)).ToList();
MessageBox.Show(res.ToString());
}
@Adriano:我只是在读那个文件..不打算从我的应用程序中写入任何内容..你仍然需要知道xml文件的编码,并用该编码读取文件。jctsel_cmbbox.SelectedIndex返回一个整数。1.ToString()“一”;1.ToString==“1”注意,您可以编辑问题。澄清组合框中的内容以及应该发生的事情。确保数据匹配。@HenkHolterman:问题已编辑。。请参阅编辑part@Adriano:我正在读取该文件..不打算从我的应用程序中写入任何内容..您仍然需要知道xml文件的编码并使用该编码读取该文件。jctsel_cmbbox.SelectedIndex返回一个整数。1.ToString()“一”;1.ToString==“1”注意,您可以编辑问题。澄清组合框中的内容以及应该发生的事情。确保数据匹配。@HenkHolterman:Question edited..请查看编辑部分,但这也失败了..在我的情况下..我收到的异常不再是一个问题..但它没有显示我在组合框中选择的内容..如果你知道怎么做,请提供解决方案..不,我没有线索。组合框中有哪些值?一些字符串值..xml文件的服务器名称它有文件名吗?那么为什么它在.Value.Equals(cmbbox\u val)中
?某些字符串值不是一个好答案:当抛出异常时,将鼠标光标移到cmbbox\u val
名称上,并准确查看其中的内容。但即使这样也会失败..在我的情况下..我收到的异常不再是一个问题..但它不会显示我在组合框中选择的内容..可以吗如果你知道怎么做的话,请给我一个解决办法不,我一点都不知道。组合框中有哪些值?一些字符串值..xml文件的服务器名称它有文件名吗?那么为什么它出现在.Value.Equals(cmbbox\u val)
中?一些字符串值不是一个好答案:当异常发生时