BizTalk 新增/修改/删除 XmlDocument 名字空间的高效方法
新增一个名字空间
public class AddXmlNamespaceStream : XmlTranslatorStream { private String namespace_; private int level_ = 0; // hierarchy level public AddXmlNamespaceStream(Stream stream, String @ namespace ) : base (XmlReader.Create(stream)) { namespace_ = @ namespace ; } #region XmlTranslatorStream Overrides protected override void TranslateStartElement( string prefix, string localName, string nsURI) { if (level_++ != 0) { base .TranslateStartElement(prefix, localName, nsURI); return ; } if (String.IsNullOrEmpty(nsURI)) { nsURI = namespace_; if (String.IsNullOrEmpty(prefix)) prefix = "__bts_ns0__" ; } base .TranslateStartElement(prefix, localName, nsURI); } protected override void TranslateEndElement( bool full) { if (level_-- != 0) { base .TranslateEndElement(full); return ; } base .TranslateEndElement(full); } #endregion } |
删除名字空间
public class XmlNamespaceRemoverStream : XmlTranslatorStream { protected override void TranslateStartElement( string prefix, string localName, string nsURI) { base .TranslateStartElement( null , localName, null ); } protected override void TranslateAttribute() { if ( this .m_reader.Prefix != "xmlns" ) base .TranslateAttribute(); } public XmlNamespaceRemoverStream(Stream input) : base ( new XmlTextReader(input), Encoding.Default) { } } |
修改根节点 名字空间
public class XmlNamespaceModifierStream : XmlTranslatorStream { private const string CIN_DOCTYPE = "catalogueItemNotification" ; private const string CPN_DOCTYPE = "priceSynchronisationDocument" ; private const string ROOT_GS1_ELEMENT = "StandardBusinessDocument" ; private const string NS_PREFIX = "http://www.test.com" ; private string _newNamespaceVersion; private string _documentType; protected override void TranslateStartElement( string prefix, string localName, string nsURI) { string newNSUri = string .Empty; bool isElementFoundWithNamespace = false ; bool isFirstElement = false ; if (! string .IsNullOrEmpty(prefix) && !isFirstElement) { //element found with prefix. Modify namespace with new value and append passed namespace version newNSUri = NS_PREFIX + _newNamespaceVersion; isElementFoundWithNamespace = true ; if (localName.Equals(ROOT_GS1_ELEMENT)) isFirstElement = true ; } if (isElementFoundWithNamespace & isFirstElement) { //replace with new namespace Debug.WriteLine( string .Format( "[BTS.Utilities.CustomPipelines.NamespaceModifier.XmlNamespaceModifierStream]Replace namespace with {0}" , nsURI + newNSUri)); if (_documentType.Equals(CIN_DOCTYPE)) localName = localName + "Catalogue" ; if (_documentType.Equals(CPN_DOCTYPE)) localName = localName + "Price" ; base .TranslateStartElement( null , localName, newNSUri); //base.TranslateStartElement(prefix, localName, newNSUri); } else { base .TranslateStartElement( null , localName, null ); //base.TranslateStartElement(prefix, localName, newNSUri); } } protected override void TranslateAttribute() { if ( this .m_reader.Prefix != "xmlns" && this .m_reader.Name != "xmlns" ) base .TranslateAttribute(); } public XmlNamespaceModifierStream(Stream input, string namespaceVersion, string documentType) : base ( new XmlTextReader(input), Encoding.Default) { Debug.WriteLine( "[BTS.Utilities.CustomPipelines.NamespaceModifier.XmlNamespaceModifierStream]Entered method" ); _newNamespaceVersion = namespaceVersion.Trim(); _documentType = documentType.Trim(); Debug.WriteLine( "[BTS.Utilities.CustomPipelines.NamespaceModifier.XmlNamespaceModifierStream]Exit method" ); } } |
分类:
Biztalk
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2008-08-08 手動移除 Windows internal database