2016-06-21 3 views
0

В настоящее время мой XmlDocument не отображает тег пространства имен в моем выпуске. Я новичок в XmlDocument, и я копирую функциональность из старого проекта на другом языке.Как правильно добавить пространство имен XML в свой XMLDocument?

Мой выход почти выглядит правдоподобно, за исключением того, что в месте расположения схемы отсутствует пространство имен - как и каждый другой экземпляр, который я пытаюсь добавить. Ниже приведен пример заголовка и случайного значения.

Мой буквальный выход (удаляет 'XSI:' Я добавить в код):

<ClinicalDocument 
     xmlns="urn:hl7-org:v3" 
     xmlns:mif="urn:hl7-org:v3/mif" 
     xmlns:voc="urn:hl7-org:v3/voc" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="urn:hl7-org:v3 CDA.xsd"> 
... 
<value type="CE" codeSystem="2.16.840.1.113883.6.96" code="55561003" displayName="Active"/> 

Мой ожидаемый/выхода (имеет 'XSI:' правильно прилагается)

<ClinicalDocument 
    xmlns="urn:hl7-org:v3" 
    xmlns:mif="urn:hl7-org:v3/mif" 
    xmlns:voc="urn:hl7-org:v3/voc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:hl7-org:v3 CDA.xsd"> 
... 
<value xsi:type="CE" codeSystem="2.16.840.1.113883.6.96" code="55561003" displayName="Active"/> 

Мой код :

XmlDocument doc = new XmlDocument(); 
    XmlNode docNode = doc.CreateXmlDeclaration("1.0", null, null); 
    doc.AppendChild(docNode); 

    var node = doc.CreateElement("ClinicalDocument"); 
    XmlAttribute attribute; 
    XmlElement element; 

    attribute = doc.CreateAttribute("xmlns:xsi"); 
    attribute.Value = "http://www.w3.org/2001/XMLSchema-instance"; 
    node.Attributes.Append(attribute); 

    attribute = doc.CreateAttribute("xsi:schemaLocation"); 
    attribute.Value = "urn:hl7-org:v3 CDA.xsd"; 
    node.Attributes.Append(attribute); 

, а затем значение тега

element5 = doc.CreateElement("value"); 
    element5.AddAttribute("xsi:type", "CD", doc); 
    element5.AddAttribute("displayName", mytext, doc); 

EDIT
Как Youngjae указал ниже мне нужно определить пространство имен отдельно, используя перегруженный CreateAttribute метода следующим образом:

XmlAttribute typeAttr = doc.CreateAttribute("xsi", "type", xsiUri); 

Спасибо.

ответ

1

Я тестировал ниже код:

// Commonly used namespace 
string xsiUri = "http://www.w3.org/2001/XMLSchema-instance"; 

// Same as your code to create root element 
XmlDocument doc = new XmlDocument(); 
XmlNode docNode = doc.CreateXmlDeclaration("1.0", null, null); 
doc.AppendChild(docNode); 

var node = doc.CreateElement("ClinicalDocument"); 
XmlAttribute attribute; 
XmlElement element; 

attribute = doc.CreateAttribute("xmlns:xsi"); 
attribute.Value = xsiUri; 
node.Attributes.Append(attribute); 

attribute = doc.CreateAttribute("xsi:schemaLocation"); 
attribute.Value = "urn:hl7-org:v3 CDA.xsd"; 
node.Attributes.Append(attribute); 

// Child element: <value> 
element = doc.CreateElement("value"); 

XmlAttribute typeAttr = doc.CreateAttribute("xsi", "type", xsiUri); 
typeAttr.Value = "CE"; 
element.Attributes.Append(typeAttr); 

XmlAttribute displayNameAttr = doc.CreateAttribute("displayName"); 
displayNameAttr.Value = "Active"; 
element.Attributes.Append(displayNameAttr); 

node.AppendChild(element); 

И это дает результат ниже

<ClinicalDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="urn:hl7-org:v3 CDA.xsd"> 
    <value xsi:type="CE" displayName="Active" /> 
</ClinicalDocument> 
+0

Что это сделал - я должен был использовать перегруженный метод CreateAttribute, как вы указали. Благодарю. –

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

  • Нет связанных вопросов^_^