从动态创建的文本框中创建新属性

时间:2014-08-15 07:21:43

标签: c# xml xpath

我正在尝试通过在选择列表框项目时获取面板内动态创建的文本框的值来为选定节点创建新属性。我确定你没有从我刚才所说的内容中解脱出来,所以给你一张照片来表达想法。

enter image description here

所以我重新加载xml文件后的问题我在节点

中看到了这个东西

d3p1:DisplayFormat="" xmlns:d3p1="gh"

这是正在运行的代码

if (addEl.Count != 0)
{
    XmlDocument xDoc = new XmlDocument();
    xDoc.Load(xml);

    XmlNode pnode = xDoc.DocumentElement.SelectSingleNode("//Class[@Name='" + currentClass + "']/Property[@Id=" + pList.SelectedItem + "]");
    for (int i = 0; i < availableProperties.SelectedItems.Count; i++)
    {
        string selecteItem = availableProperties.SelectedItem.ToString();
        Control[] controls = table2.Controls.Find("txt" + selecteItem, true);

        foreach (Control item in controls)
        {
            foreach (string n in addEl)
            {
                    pnode.Attributes.Append(xDoc.CreateAttribute(n, item.Text));
                    xDoc.Save(xml);
                    ok = true;
            }
        }
    }
 }

询问的xml结构。对不起,我忘记了这个

<Root>
  <Class Name="ECMInstruction" Style="Top">
    <Entity Id="1" Name="DocumentInformation" />
    <Entity Id="2" Name="CustomerInformation" />
    <Property Id="1" Name="DocumentTitle">
    </Property>
    <Property Id="2" Name="DateCreated">
      <Lists>
        <ListName>ws_Users</ListName>
        <ListName>dfdfdfd</ListName>
      </Lists>
    </Property>
    <Property Id="3" Name="Deadline">
    </Property>
  </Class>
  <Class Name="AlphaCertificationsIndividual" Style="Top">
    <Entity Id="1" Name="DocumentInformation" />
    <Property Id="1" Name="DocumentTitle">
    </Property>
    <Property Id="2" Name="DateCreated">
      <Lists>
        <ListName>ws_Users</ListName>
        <ListName>dfdfdfd</ListName>
      </Lists>
    </Property>
    <Property Id="3" Name="Deadline">
    </Property>
  </Class>
</Root>

2 个答案:

答案 0 :(得分:1)

而不是这个

pnode.Attributes.Append(xDoc.CreateAttribute(n, item.Text));

尝试使用适当的属性名称和值。

pnode.Attributes.Append(xDoc.CreateAttribute("MyNewAttrib")); 
pnode.Attributes["MyNewAttrib"].Value = "newval";

答案 1 :(得分:0)

CreateAttribute()没有overload that accept attribute value as parameter,所以你可以在一行中这样做:

pnode.Attributes.Append(xDoc.CreateAttribute(n, item.Text));

specifies namespace URI of the attribute以上的第二个参数,这就是为什么你有不受欢迎的前缀属性的原因。您需要稍后在其他答案中建议分配属性值:

pnode.Attributes.Append(xDoc.CreateAttribute(n));
pnode.Attributes[n].Value = item.Text;