2012-06-04 3 views
0

я программно создать узел, однако один из атрибутов выходит по-другому, чем то, что я указал в коде:C атрибут # XML создается неправильно

   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

Это, вероятно, ожидаемое поведение этого переопределения CreateAttribute в сочетании с сохранением документа:

NamespaceURI остается пустым, если префикс не является признанным встроенной приставкой, таких как Xmlns. В этом случае NamespaceURI имеет значение http://www.w3.org/2000/xmlns/.

Используйте другое переопределение XmlDocument.CreateAttribute указать пространство имен и префикс:

XmlAttribute xRefADLCP = docXMLFile.CreateAttribute(
    "adlcp","scormtype", "correct-namespace-here"); 
+0

Я попытался добавить это: XmlAttribute xRefADLCP = docXMLFile.CreateAttribute ("adlcp", "scormtype", docXMLFile.DocumentElement.NamespaceURI); проблема в том, что он добавил еще один атрибут для xmlns: adlcp = "http://www.imsproject.org/xsd/imscp_rootv1p1p2". Любые идеи, как избавиться от него? – user1366062

+0

Вы переопределяете пространство имен. Из другого комментария к корню - 'xmlns: adlcp =" adlnet.org/xsd/adlcp_rootv1p2 ";', из этого - 'xmlns: adlcp =" imsproject.org/xsd/imscp_rootv1p1p2 "'. До вас, чтобы решить, что вы хотите, если пространства имен одинаковы, я считаю, что не будет дублированного атрибута xmlns для дочернего элемента. –

+0

спасибо! Я поменял его на матч, и он ушел. – user1366062

0

Вы можете установить Prefix для атрибута непосредственно, вместо того, чтобы пытаться создать атрибут рядный с префиксом.

XmlAttribute xRefADLCP = docXMLFile.CreateAttribute("scormtype"); 
// ... 
xRefADLCP.Prefix = "adlcp"; 
xRefADLCP.Value = "sco"; 
+0

по какой-то причине, что дает тот же результат, префикс не появляется. Понятия не имею почему. Я пробовал это раньше и не мог заставить его работать. – user1366062

+0

@ user1366062 У вас есть пространство имен, определенное в вашем документе XML? Он должен существовать (и в надлежащем объеме). Обязательно укажите определение xmlns где-то –

+0

. В начало документа входит следующее, которое, как я полагаю, должно охватывать его. user1366062

Смежные вопросы