国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Linq to xml 操作帶命名空間的xml

2019-11-17 03:05:31
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Linq to xml 操作帶命名空間的xml

昨天需要操作用代碼操作csPRoj文件,實(shí)現(xiàn)不同vs版本的切換。

在用XElement讀取了csproj文件以后怎么也獲取不到想要的對(duì)象。

反反復(fù)復(fù)試驗(yàn)了好多次都不得要領(lǐng):先看下csproj文件的內(nèi)容:

<?xml version="1.0" encoding="utf-8"?><Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  <Import Project="$(MSBuildExtensionsPath)/$(MSBuildToolsVersion)/Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)/$(MSBuildToolsVersion)/Microsoft.Common.props')" />  <PropertyGroup>    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>    <ProjectGuid>{EC9D3364-405E-4931-8148-779183C72A40}</ProjectGuid>    <OutputType>Exe</OutputType>    <AppDesignerFolder>Properties</AppDesignerFolder>    <RootNamespace>AsyncDemo</RootNamespace>    <AssemblyName>AsyncDemo</AssemblyName>    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>    <FileAlignment>512</FileAlignment>  </PropertyGroup>  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">    <PlatformTarget>AnyCPU</PlatformTarget>    <DebugSymbols>true</DebugSymbols>    <DebugType>full</DebugType>    <Optimize>false</Optimize>    <OutputPath>bin/Debug/</OutputPath>    <DefineConstants>DEBUG;TRACE</DefineConstants>    <ErrorReport>prompt</ErrorReport>    <WarningLevel>4</WarningLevel>  </PropertyGroup></Project>

因?yàn)橹皇菫榱苏f(shuō)明問題,我只截取了一部分csproj文件

我最初的代碼是:

XDocument doc = XDocument.Load(@"D:/Demo/AsyncDemo/AsyncDemo/AsyncDemo.csproj");XElement x = doc.Element("Project");

這個(gè)x始終為空,最后分析了下doc對(duì)象

果然找到了玄機(jī),這個(gè)name并不是一個(gè)單純“project”,還帶有命名空間。

那么如何獲得這個(gè)帶有Namespace的節(jié)點(diǎn)名哪?

好吧,讓我們回過(guò)頭來(lái)看看XElement的構(gòu)造函數(shù):

public XElement(XName name); 注意哦,參數(shù)的類型是XName,而不是string,那么平時(shí)為什么能用string哪?XName定義了一個(gè)隱式的轉(zhuǎn)換,可以把string隱式的轉(zhuǎn)換成XName。

所以,關(guān)于Namespace自然也要從XNamespace入手,然后找一個(gè)能夠變成XName的方法,察看XNamespace的定義,就可以看到:

public static XName Operator +(XNamespace ns, string localName); 只要把XNamespace加上本地名稱(string),就是一個(gè)XName了,非常簡(jiǎn)單。

再看看如何創(chuàng)建一個(gè)XNamespace:

public static implicit operator XNamespace(string namespaceName); 又是隱式轉(zhuǎn)換。。。來(lái)看看具體如何創(chuàng)建一個(gè)帶namespace的project吧:

 static void TestXml()        {            XDocument doc = XDocument.Load(@"D:/Demo/AsyncDemo/AsyncDemo/AsyncDemo.csproj");            XNamespace v = "http://schemas.microsoft.com/developer/msbuild/2003";            XElement x = doc.Element(v + "Project");        }

定義一個(gè)namespace,在使用時(shí)直接+string即可。這樣就可以得到我們想要的對(duì)象了,具體操作代碼如下:

 static void TestXml()        {            string path = @"D:/Demo/AsyncDemo/AsyncDemo/AsyncDemo.csproj";            XDocument doc = XDocument.Load(path);            XNamespace v = "http://schemas.microsoft.com/developer/msbuild/2003";            var x = doc.Element(v + "Project").Elements(v+"PropertyGroup");            foreach (var e in x)            {                XElement element = e.Element(v + "AssemblyName");                if(element!=null)                {                    element.SetValue("abcd");                }            }            doc.Save(path);        }

這里面所有需要操作的節(jié)點(diǎn)都要采用命名空間加節(jié)點(diǎn)名的方式。

希望對(duì)您有所幫助&hellip;…


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 博罗县| 紫金县| 平南县| 鹤峰县| 鹤山市| 滨州市| 鲁甸县| 兴宁市| 门头沟区| 合肥市| 澜沧| 博客| 台南县| 平陆县| 平顺县| 五原县| 锡林郭勒盟| 丹棱县| 井冈山市| 黔西| 那曲县| 田阳县| 海淀区| 京山县| 深泽县| 平乡县| 济阳县| 惠来县| 新和县| 中超| 徐汇区| 泾阳县| 固阳县| 灯塔市| 九台市| 当雄县| 新营市| 达拉特旗| 平凉市| 武义县| 年辖:市辖区|