再一次来发帖求帮助……本人希望通过c#可以输出入上面的xml,搜了几个例子依样画瓢了一下,生成了下面的xml,发现有很多地方不对。希望高手能帮本人指正一下。主要是在使用SetAttirbute的时候,rdf:ID 之类的输出不正确。请高手帮本人看一下。
代码如下。
代码如下。
XmlDataDocument xmlDoc;
xmlDoc = new XmlDataDocument();
XmlDeclaration xmlDocNode = xmlDoc.CreateXmlDeclaration("1.0", "GB2312", null);
xmlDoc.AppendChild(xmlDocNode); //加入xml声明段落
XmlElement xmlele = xmlDoc.CreateElement("rdf", "RDF", "rdf:RDF");
xmlele.SetAttribute("xml:base", "nari");
xmlele.SetAttribute("xmlns:rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
xmlele.SetAttribute("xmlns:cim", "http://iec.ch/TC57/2003/CIM-schema-cim10#");
xmlele.SetAttribute("xmlns:cimNARI", "http://www.naritech.cn/CIM/ext-schema#");
xmlDoc.AppendChild(xmlele);
XmlElement xmlsub1 = xmlDoc.CreateElement("cim", "Substation", "http://iec.ch/TC57/2003/CIM-schema-cim10#");
xmlsub1.SetAttribute("rdf:ID", "_28159176D77E2467");
xmlele.AppendChild(xmlsub1);
XmlElement xmlsub1name = xmlDoc.CreateElement("cim", "Naming.name", "http://iec.ch/TC57/2003/CIM-schema-cim10#");
xmlsub1name.InnerText = "WALDEN";
xmlsub1.AppendChild(xmlsub1name);
XmlElement xmlsub1member = xmlDoc.CreateElement("cim", "Substation.MemberofSubControlArea", "http://iec.ch/TC57/2003/CIM-schema-cim10#");
xmlsub1member.SetAttribute("rdf:resource", "#55D3DE366B2AD032");
xmlsub1.AppendChild(xmlsub1member);
XmlElement xmlsub2 = xmlDoc.CreateElement("cim", "EnergConsumer", "http://iec.ch/TC57/2003/CIM-schema-cim10#");
xmlsub2.SetAttribute("rdf:ID", "_963867E4A4B1699");
xmlele.AppendChild(xmlsub2);
XmlElement xmlsub2pfixed = xmlDoc.CreateElement("cim", "EnergyConsumer.Pfixed", "http://iec.ch/TC57/2003/CIM-schema-cim10#");
xmlsub2pfixed.InnerText = "89.59";
xmlsub2.AppendChild(xmlsub2pfixed);
XmlElement xmlsub2qfixed = xmlDoc.CreateElement("cim", "EnergyConsumer.Qfixed", "http://iec.ch/TC57/2003/CIM-schema-cim10#");
xmlsub2qfixed.InnerText = "20.42";
xmlsub2.AppendChild(xmlsub2qfixed);
XmlElement xmlsub2load = xmlDoc.CreateElement("cim", "EnergyConsumer.LoadArea", "http://iec.ch/TC57/2003/CIM-schema-cim10#");
xmlsub2load.SetAttribute("rdf:resouce", "#_9C1602456V178B75");
xmlsub2.AppendChild(xmlsub2load);
XmlElement xmlsub2terminal = xmlDoc.CreateElement("cim", "ConductingEquipment.Terminal", "http://iec.ch/TC57/2003/CIM-schema-cim10#");
xmlsub2terminal.SetAttribute("rdf:resource", "#_A920F93C9D23DD45");
xmlsub2.AppendChild(xmlsub2terminal);
XmlElement xmlsub2member = xmlDoc.CreateElement("cim", "Equipment.Memberof_EquipmentContainer", "http://iec.ch/TC57/2003/CIM-schema-cim10#");
xmlsub2member.SetAttribute("rdf:resource", "#_A9D1427B3784CD78");
xmlsub2.AppendChild(xmlsub2member);
XmlElement xmlsub2name=xmlDoc.CreateElement("cim", "Naming.name", "http://iec.ch/TC57/2003/CIM-schema-cim10#");
xmlsub2name.InnerText="610";
xmlsub2.AppendChild(xmlsub2name);
xmlDoc.Save("test1.xml");
解决方案
40
xmlsub1.SetAttribute(“ID”, “http://www.w3.org/1999/02/22-rdf-syntax-ns#”, “_28159176D77E2467″);
原理解析:
<rdf:RDF xml:base=”nari” xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#”
开头有设置rdf命名空间,则后面SetAttribute时,会寻找已有的命名空间,假如存在,则把别名放在前缀,例如 rdf:
否则会变成
<cim:Substation d2p1:ID=”_28159176D77E2467″ rdf:ID1=”111111111111111″ xmlns:d2p1=”未引入的命名空间”>
本人感受下吧。
原理解析:
<rdf:RDF xml:base=”nari” xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#”
开头有设置rdf命名空间,则后面SetAttribute时,会寻找已有的命名空间,假如存在,则把别名放在前缀,例如 rdf:
否则会变成
<cim:Substation d2p1:ID=”_28159176D77E2467″ rdf:ID1=”111111111111111″ xmlns:d2p1=”未引入的命名空间”>
本人感受下吧。