我正在以编程方式创建节点,但其中一个属性与我在代码中指定的不同:
XmlNode xResource = docXMLFile.CreateNode(XmlNodeType.Element, "resource", docXMLFile.DocumentElement.NamespaceURI);
XmlAttribute xRefIdentifier = docXMLFile.CreateAttribute("identifier");
XmlAttribute xRefADLCP = docXMLFile.CreateAttribute("adlcp:scormtype");
XmlAttribute xRefHREF = docXMLFile.CreateAttribute("href");
XmlAttribute xRefType = docXMLFile.CreateAttribute("type");
xRefIdentifier.Value = "RES-" + strRes;
xRefADLCP.Value = "sco";
xRefHREF.Value = dataRow["launch_url"].ToString().ToLower();
xRefType.Value = "webcontent";
xResource.Attributes.Append(xRefIdentifier);
xResource.Attributes.Append(xRefADLCP);
xResource.Attributes.Append(xRefHREF);
xResource.Attributes.Append(xRefType);
这最终会创建如下所示的行。请注意,'adlcp:scormtype'已变为'scormtype',这不是我指定的。任何想法如何让它显示我在CreateAttribute中的内容?
<resource identifier="RES-CDA68F64B849460B93BF2840A9487358" scormtype="sco" href="start.html" type="webcontent" />
答案 0 :(得分:0)
您可以直接为属性设置Prefix,而不是尝试使用前缀内联创建属性。
XmlAttribute xRefADLCP = docXMLFile.CreateAttribute("scormtype");
// ...
xRefADLCP.Prefix = "adlcp";
xRefADLCP.Value = "sco";
答案 1 :(得分:0)
这可能是此覆盖CreateAttribute与保存文档相关的预期行为:
NamespaceURI保持为空,除非前缀是可识别的内置前缀,例如xmlns。在这种情况下,NamespaceURI的值为http://www.w3.org/2000/xmlns/。
使用另一个覆盖XmlDocument.CreateAttribute来指定名称空间和前缀:
XmlAttribute xRefADLCP = docXMLFile.CreateAttribute(
"adlcp","scormtype", "correct-namespace-here");