2015-01-03 42 views
0

我從數據庫創建一個巨大的XML,其中大部分是硬編碼(預定義的值),所以我決定使用StringBuilder創建字符串並分配它到節點的InnerXML,但用於其中一個屬性的前綴不允許我設置聲明「前綴未聲明」的字符串。使用node.innerXML設置XML字符串 - 使用前綴導致錯誤

XMLNode addr = DocumentElement.createElement("element","address",null); 
addr.InnerXML = "<test><s1>ttt</s1><s2 xsi:type="test">yyy</s2></test>"; 

前綴xsi在這裏導致錯誤。有沒有解決這個問題的方法。

回答

0

解決方法是:

首先簡單地創建的XMLDocument並分配純粹的innerXML而沒有命名空間和前綴,因爲

XmlDocument ccda_xDoc = new XmlDocument(); 
    ccda_xDoc.LoadXml("<ClinicalDocument></ClinicalDocument>"); 

    XmlElement root = ccda_xDoc.DocumentElement; 
    root.InnerXml = @" My XML String without Prefix for any namespace"; 

然後搜索要前綴申請前綴,並添加屬性節點:

XmlNode xsiValue = root.SelectSingleNode("encounter/code[@code='99201']"); 
XmlAttribute xsitype = structuredBody.CreateAttribute("sdtc", "valueSet", "urn:hl7-org:sdtc"); 
xsitype.Value = "2.16.840.1.113883.3.464.1003.101.12.1047"; 
xsiValue.Attributes.Prepend(xsitype); 

最後應用的命名空間根節點:

ccda_xDoc.DocumentElement.SetAttribute("xmlns", "urn:hl7-org:v3"); 
ccda_xDoc.DocumentElement.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); 
ccda_xDoc.DocumentElement.SetAttribute("xmlns:voc", "urn:hl7-org:v3/voc"); 
ccda_xDoc.DocumentElement.SetAttribute("xmlns:sdtc", "urn:hl7-org:sdtc"); 
0

xsi似乎是一個命名空間。您將需要聲明該名稱空間或不使用它。在沒有聲明的情況下使用它是無效的。

+0

是的,我已經附加此屬性根節點。 xmlns:xsi =「http://www.w3.org/2001/XMLSchema-instance」但仍會出現此錯誤。 –

+0

那麼也許你可以發佈你的代碼?如果我們必須通過tcp/ip讀取你的想法,我們的調試技能有點缺乏:) – nvoigt

0

有一些類似的問題,我發現瞭解決這個問題的唯一辦法,就是所需的命名空間添加到您的InnserXml

XmlDocument xdoc = new XmlDocument(); 
xdoc.LoadXml("<Document xmlns=\"www.abc.com\" xmlns:xsi=\"w3.org/2001/XMLSchema-instance\"></Document>"); 

XmlNode t = xdoc.CreateElement("element", "t", null); 
t.InnerXml = "<originalText xmlns:xsi=\"w3.org/2001/XMLSchema-instance\"><reference xsi:value=\"testVal\"/></originalText>"; 

xdoc.FirstChild.AppendChild(t);