Linq to Xml插入带有命名空间的节点

原始 xml 文件,其中 带****括起来的部分为我们想要插入的条目。

<?xml version="1.0" encoding="utf-8"?>
<?AutomationStudio Version=4.6.2.116?>
<Package Version="1.00.0" xmlns="http://br-automation.co.at/AS/Package">
  <Objects>
    <Object Type="Package">DOC</Object>
    <Object Type="File" Description="Global data types">Global.typ</Object>
    <Object Type="File" Description="Global variables">Global.var</Object>
    **<Object Type="File" Description="From Outside Import">DisModuleInstance.var</Object>**
    <Object Type="Package" Description="Global libraries">Libraries</Object>
    <Object Type="DataObject" Language="Ett" Description="轴报警文件">acp10etxen</Object>
    <Object Type="Package" Description="后钩轴">Hook</Object>
    <Object Type="Package" Description="配方">RecipeCtrl</Object>
    <Object Type="Package" Description="IP地址设定">IPset</Object>
    <Object Type="Package">HwFilePreprocessing</Object>
  </Objects>
</Package>

要在

<Object Type="File" Description="Global variables">Global.var</Object>

的后面插入前 xml 中被 ****括起的条目

<Object Type="File" Description="From Outside Import">DisModuleInstance.var</Object>

但是正常通过 SetAttributeValue 来操作,总是在文件保存的时候自动插入一个 Attribute,为 xmlns="" 的这样一个属性,办公室网络无法科学上网,遂百度查证,资料也不是很详细而且有些不适用。比如 linq 的 没有 .NameTable
但是怎么实现我们这个需求呢,指明要插入条目的命名空间即可,即事先声明。
创建 element 的时候即带命名空间即可。

XNamespace xmlns = @"http://br-automation.co.at/AS/Package";
                    XElement InsFile = new XElement(xmlns + "Object", _GVFileName);

原理是:
在这里插入图片描述
这里是插入条目的源码,其中 GVLocation 是获取插入的位置,是一个SingleOrDefault()

var Package = XDocument.Load(Path);

var GVLocation = (
                 from a in Package.Descendants()
                 where a.Value.Equals("Global.var")
                 select a
                 ).SingleOrDefault();
if (GVLocation != null)
{
   XNamespace xmlns = @"http://br-automation.co.at/AS/Package";
   //添加 xmlnamespace
   XElement InsFile = new XElement(xmlns + "Object", _GVFileName);
   InsFile.RemoveAttributes();
   InsFile.SetAttributeValue("Type", "File");
   InsFile.SetAttributeValue("Description", "From Outside Import");
   GVLocation.AddAfterSelf(InsFile);
   Package.Save(Path);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值