将命名空间和别名添加到现有 xml
Add namespace and alias to existing xml
我正在使用下面的代码更改 BizTalk 管道组件中现有 XML 消息中的命名空间。这行得通,但我如何将名称空间别名也添加到文档中。
XNamespace toNs = "http://hl7.org/fhir/Encounters";
XElement doc = XElement.Parse(xmlIn);
doc.DescendantsAndSelf().Attributes().Where(a => a.IsNamespaceDeclaration).Remove();
var ele = doc.DescendantsAndSelf();
foreach (var el in ele)
el.Name = toNs + el.Name.LocalName;
return new XDocument(doc);
您可以简单地向根添加一个声明属性。举个例子:
<Root>
<Child>Value</Child>
</Root>
如果您运行此代码:
var root = XElement.Parse(xml);
XNamespace ns = "http://www.example.com/";
foreach (var element in root.DescendantsAndSelf())
{
element.Name = ns + element.Name.LocalName;
}
root.Add(new XAttribute(XNamespace.Xmlns + "ex", ns));
你会得到这样的结果:
<ex:Root xmlns:ex="http://www.example.com/">
<ex:Child>Value</ex:Child>
</ex:Root>
有关演示,请参阅 this fiddle。
现在我们知道了这个问题的原因(重复的 MessageType),处理这个问题的正确 BizTalk 方法是部署带有配置的 XmlDisassembler 组件的自定义管道。无论如何,每个人都应该这样做。
请参阅这篇 TechNet Wiki 文章,其中描述了这种情况以及解决方法:BizTalk: Improve Deployment and Tracking by Always Creating Custom Pipelines
如果您绝对必须修改内容,在管道组件中正确的方法是使用XmlTranslatorStream。这不是 XmlDocument 或 XDocument。
从 BizTalk 的角度来看,标记的答案不正确。对不起。 :(
我正在使用下面的代码更改 BizTalk 管道组件中现有 XML 消息中的命名空间。这行得通,但我如何将名称空间别名也添加到文档中。
XNamespace toNs = "http://hl7.org/fhir/Encounters";
XElement doc = XElement.Parse(xmlIn);
doc.DescendantsAndSelf().Attributes().Where(a => a.IsNamespaceDeclaration).Remove();
var ele = doc.DescendantsAndSelf();
foreach (var el in ele)
el.Name = toNs + el.Name.LocalName;
return new XDocument(doc);
您可以简单地向根添加一个声明属性。举个例子:
<Root>
<Child>Value</Child>
</Root>
如果您运行此代码:
var root = XElement.Parse(xml);
XNamespace ns = "http://www.example.com/";
foreach (var element in root.DescendantsAndSelf())
{
element.Name = ns + element.Name.LocalName;
}
root.Add(new XAttribute(XNamespace.Xmlns + "ex", ns));
你会得到这样的结果:
<ex:Root xmlns:ex="http://www.example.com/">
<ex:Child>Value</ex:Child>
</ex:Root>
有关演示,请参阅 this fiddle。
现在我们知道了这个问题的原因(重复的 MessageType),处理这个问题的正确 BizTalk 方法是部署带有配置的 XmlDisassembler 组件的自定义管道。无论如何,每个人都应该这样做。
请参阅这篇 TechNet Wiki 文章,其中描述了这种情况以及解决方法:BizTalk: Improve Deployment and Tracking by Always Creating Custom Pipelines
如果您绝对必须修改内容,在管道组件中正确的方法是使用XmlTranslatorStream。这不是 XmlDocument 或 XDocument。
从 BizTalk 的角度来看,标记的答案不正确。对不起。 :(