我正在从C#代码生成XML文件但是当我向XML节点添加属性时,我遇到了问题。以下是代码。
XmlDocument doc = new XmlDocument();
XmlNode docRoot = doc.CreateElement("eConnect");
doc.AppendChild(docRoot);
XmlNode eConnectProcessInfo = doc.CreateElement("eConnectProcessInfo");
XmlAttribute xsiNil = doc.CreateAttribute("xsi:nil");
xsiNil.Value = "true";
eConnectProcessInfo.Attributes.Append(xsiNil);
docRoot.AppendChild(eConnectProcessInfo);
结果:
<eConnect>
<eConnectProcessInfo nil="true"/>
</eConnect>
预期结果:
<eConnect>
<eConnectProcessInfo xsi:nil="true"/>
</eConnect>
XML属性未在xml文件中添加“xsi:nil”。 请帮我解决这个问题。
答案 0 :(得分:5)
您需要将模式添加到文档中,以便首先使用xsi
更新您还需要将名称空间作为属性添加到根对象
//Store the namespaces to save retyping it.
string xsi = "http://www.w3.org/2001/XMLSchema-instance";
string xsd = "http://www.w3.org/2001/XMLSchema";
XmlDocument doc = new XmlDocument();
XmlSchema schema = new XmlSchema();
schema.Namespaces.Add("xsi", xsi);
schema.Namespaces.Add("xsd", xsd);
doc.Schemas.Add(schema);
XmlElement docRoot = doc.CreateElement("eConnect");
docRoot.SetAttribute("xmlns:xsi",xsi);
docRoot.SetAttribute("xmlns:xsd",xsd);
doc.AppendChild(docRoot);
XmlNode eConnectProcessInfo = doc.CreateElement("eConnectProcessInfo");
XmlAttribute xsiNil = doc.CreateAttribute("nil",xsi);
xsiNil.Value = "true";
eConnectProcessInfo.Attributes.Append(xsiNil);
docRoot.AppendChild(eConnectProcessInfo);
答案 1 :(得分:0)
以下是添加xsi:nil="true"
元素的最简单方法:
XmlNode element = null;
XmlAttribute xsinil = doc.CreateAttribute("xsi", "nil", "http://www.w3.org/2001/XMLSchema-instance");
xsinil.Value = "true";
element.Attributes.Append(xsinil);