新增一个名字空间

  1. public class AddXmlNamespaceStream : XmlTranslatorStream
  2. {
  3. private String namespace_;
  4. private int level_ = 0; // hierarchy level
  5.  
  6. public AddXmlNamespaceStream(Stream stream, String @namespace)
  7. : base(XmlReader.Create(stream))
  8. {
  9. namespace_ = @namespace;
  10. }
  11.  
  12. #region XmlTranslatorStream Overrides
  13.  
  14. protected override void TranslateStartElement(string prefix, string localName, string nsURI)
  15. {
  16. if (level_++ != 0)
  17. {
  18. base.TranslateStartElement(prefix, localName, nsURI);
  19. return;
  20. }
  21.  
  22. if (String.IsNullOrEmpty(nsURI))
  23. {
  24. nsURI = namespace_;
  25. if (String.IsNullOrEmpty(prefix))
  26. prefix = "__bts_ns0__";
  27. }
  28.  
  29. base.TranslateStartElement(prefix, localName, nsURI);
  30. }
  31.  
  32. protected override void TranslateEndElement(bool full)
  33. {
  34. if (level_-- != 0)
  35. {
  36. base.TranslateEndElement(full);
  37. return;
  38. }
  39.  
  40. base.TranslateEndElement(full);
  41. }
  42.  
  43. #endregion
  44. }

  删除名字空间

  1. public class XmlNamespaceRemoverStream : XmlTranslatorStream
  2. {
  3. protected override void TranslateStartElement(
  4. string prefix, string localName, string nsURI)
  5. {
  6. base.TranslateStartElement(null, localName, null);
  7. }
  8.  
  9. protected override void TranslateAttribute()
  10. {
  11. if (this.m_reader.Prefix != "xmlns")
  12. base.TranslateAttribute();
  13. }
  14.  
  15. public XmlNamespaceRemoverStream(Stream input)
  16. : base(new XmlTextReader(input), Encoding.Default)
  17. { }
  18. }

  修改根节点 名字空间

  1. public class XmlNamespaceModifierStream : XmlTranslatorStream
  2. {
  3. private const string CIN_DOCTYPE = "catalogueItemNotification";
  4. private const string CPN_DOCTYPE = "priceSynchronisationDocument";
  5. private const string ROOT_GS1_ELEMENT = "StandardBusinessDocument";
  6. private const string NS_PREFIX = "http://www.test.com";
  7.  
  8. private string _newNamespaceVersion;
  9. private string _documentType;
  10.  
  11. protected override void TranslateStartElement(string prefix, string localName, string nsURI)
  12. {
  13. string newNSUri = string.Empty;
  14. bool isElementFoundWithNamespace = false;
  15. bool isFirstElement = false;
  16.  
  17. if (!string.IsNullOrEmpty(prefix) && !isFirstElement)
  18. {
  19. //element found with prefix. Modify namespace with new value and append passed namespace version
  20. newNSUri = NS_PREFIX + _newNamespaceVersion;
  21. isElementFoundWithNamespace = true;
  22.  
  23. if (localName.Equals(ROOT_GS1_ELEMENT))
  24. isFirstElement = true;
  25. }
  26.  
  27. if (isElementFoundWithNamespace & isFirstElement)
  28. {
  29. //replace with new namespace
  30. Debug.WriteLine(string.Format("[BTS.Utilities.CustomPipelines.NamespaceModifier.XmlNamespaceModifierStream]Replace namespace with {0}", nsURI + newNSUri));
  31.  
  32. if (_documentType.Equals(CIN_DOCTYPE))
  33. localName = localName + "Catalogue";
  34. if (_documentType.Equals(CPN_DOCTYPE))
  35. localName = localName + "Price";
  36.  
  37. base.TranslateStartElement(null, localName, newNSUri);
  38. //base.TranslateStartElement(prefix, localName, newNSUri);
  39. }
  40. else
  41. {
  42. base.TranslateStartElement(null, localName, null);
  43. //base.TranslateStartElement(prefix, localName, newNSUri);
  44. }
  45.  
  46. }
  47.  
  48. protected override void TranslateAttribute()
  49. {
  50. if (this.m_reader.Prefix != "xmlns" && this.m_reader.Name != "xmlns")
  51. base.TranslateAttribute();
  52. }
  53.  
  54. public XmlNamespaceModifierStream(Stream input, string namespaceVersion, string documentType)
  55. : base(new XmlTextReader(input), Encoding.Default)
  56. {
  57. Debug.WriteLine("[BTS.Utilities.CustomPipelines.NamespaceModifier.XmlNamespaceModifierStream]Entered method");
  58. _newNamespaceVersion = namespaceVersion.Trim();
  59. _documentType = documentType.Trim();
  60. Debug.WriteLine("[BTS.Utilities.CustomPipelines.NamespaceModifier.XmlNamespaceModifierStream]Exit method");
  61. }
  62. }

  

BizTalk 新增/修改/删除 XmlDocument 名字空间的高效方法的更多相关文章

  1. Oracle忘记用户名和密码以及管理员用户新增修改删除用户

    Oracle忘记密码: 1.以管理员身份登录,打开dos窗口,输入 sqlplus / as sysdba 回车 2.查看当前用户和状态 select username, account_status ...

  2. MYSQL基础01(新增,修改,删除)

    首先说明一下,本人之前一直都是用MSSQL,由于工作原因,每天写上百条sql语句,并持续了几年;由于换了工作目前主要接触的MYSQL;所以现在开始学习MYSQL. 我的学习计划很简单,我在MSSQL使 ...

  3. Java代码操作properties文件(读取,新增/修改,删除)

    项目中需要用到操作properties文件中的数据,记录一下 package com.bonc.savepic.save; import java.io.FileNotFoundException; ...

  4. .net操作xml文件(新增.修改,删除,读取) 转

    今天有个需求需要操作xml节点.突然见遗忘了许多.上网看了些资料.才整出来.脑袋真不够用.在这里把我找到的资料共享一下.方便以后使用.本文属于网摘/ 1 一.简单介绍2 using System.Xm ...

  5. spring-data-jpa 新增 修改 删除 查询 分页

      1.查询所有数据 findAll() 2.分页查询 findAll(new PageRequest(0, 2)) 3.根据id查询 findOne() 4.根据实体类属性查询: findByPro ...

  6. sql 新增 修改 删除 列操作

    IF COL_LENGTH('SYS_Department', 'CreatedBy') IS NOT NULL --判断 SYS_Department 中是否存在 CreatedBy 字段 EXEC ...

  7. oracle 数据库更新 新增 修改 删除

    数据增加 INSERT INTO 表名称 [(字段,字段,...)] VALUES (值,值,...) ; 考虑到日后代码的可维护性,一定要使用完整的语法进行数据的增加. 数据修改 UPDATE 表名 ...

  8. SQL中插入单引号,新增修改删除

    1.插入单引号如果不转化的话,字符串插入到数据库中错误的,只要在字符串中有单引号的地方在加一个单引号即可.    例如:在数据库插入'井下设备' :    insert into Static_Bel ...

  9. windows新增/修改/删除系统环境变量bat示例,一键配置JAVA_HOME

    setx JAVA_HOME "C:\Program Files\java\jdk1.6.0_27" /m setx classpath = ".;%JAVA_HOME% ...

随机推荐

  1. JAVAC 命令详解

    转自:http://jeffchen.iteye.com/blog/395671 结构 javac [ options ] [ sourcefiles ] [ @files ] 参数可按任意次序排列. ...

  2. 使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据

    使用PreparedStatement向数据表中插入.修改.删除.获取Blob类型的数据 2014-09-07 20:17 Blob介绍 BLOB类型的字段用于存储二进制数据 MySQL中,BLOB是 ...

  3. RQNOJ 2 开心的金明

    一道基础的01背包,要是不明白可以自己搜一下背包九讲,自己刚开始数组开小了,题目看串了行,找了半天,小错还是要格外注意的. #include <iostream> #include < ...

  4. squid常用操作

    如何查看squid的缓存命中率 使用命令: squidclient -h host -p port mgr:info比如: /usr/local/squid/bin/squidclient -h 12 ...

  5. mui几种页面跳转方式对比

    1.初始化时创建子页面 mui.init({ subpages: [{ url: your - subpage - url, //子页面HTML地址,支持本地地址和网络地址 id: your - su ...

  6. ZOJ 3229 Shoot the Bullet (有源有汇有上下界最大流)

    题意:一个人要给女孩子们拍照,一共 n 天,m 个女孩子,每天他至多拍 d[i] 张照片,每个女孩子总共要被至少拍 g[i] 次.在第 i 天,可以拍 c[i] 个女孩子,c[i] 个女孩子中每个女孩 ...

  7. JAVA核心问题(一)反射之引言 构造函数

    反射,简单来说,就是在运行时获取Class对象的所有属性和方法,无论公有私有.虽然是一个基础问题,在这里还是全面的记录一下,认真对待! 获取构造函数 构造函数大致分为两种,public和非public ...

  8. PHP几种加密方式

    1.MD5() 2.Sha1() 3.urlencode()方法用于加密,urldecode()方法用于解密 4.base64_encode (  )  64位加密   base64_decode ( ...

  9. 项目中使用同一dll的不同版本

    在一个项目中,因为使用了一些插件,这些插件使用了不同版本的log4net,有1.2版本,有2.0版本的.当运行的时候发生冲突. 解决办法:在config中加入如下的配置 <dependentAs ...

  10. 一篇入门 -- Git

    一. Git 介绍 Git作为一款分布式的==版本控制==工具,作为一名程序员,是必须要掌握的. 最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布.最初目的是为更好地 ...