繁体   English   中英

使用node.innerXML设置XML字符串-使用前缀会导致错误

[英]Set XML string using node.innerXML - use of prefix causes error

我正在从数据库创建一个巨大的xml,并且其中大部分是硬编码的(预定义值),所以我决定使用StringBuilder创建字符串并将其分配给节点的InnerXML,但是用于其中一个属性的前缀不允许我设置说明“未声明前缀”的字符串。

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

前缀xsi在这里引起错误。 有任何解决方法吗?

xsi似乎是一个名称空间。 您将需要声明该名称空间或不使用它。 在不声明它无效的情况下使用它。

遇到一些类似的问题,我找到解决此问题的唯一方法是将所需的名称空间添加到您的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);

解决方法是:

首先,简单地创建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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM