C#读取带命名空间的xml,xaml文件的解决方案

摘要:
使用C#读取xml文件有三种常见方法:1。xmlDocument2、XmlTextReader 3和LinqToXml。然而,这些方法不知道在读写一些带有名称空间的xml时要做什么。对于xaml文件,虽然C#可以使用XamlReader将xaml文件直接转换为对象,但有时我们只想获取一些字段,而不是将它们转换为对象。本文将以阅读xml的方式阅读和编写xaml,为您提供一个示例。

使用C#读取xml文件有三种常用的方式:

1、xmlDocument

2、XmlTextReader

3、Linq To Xml

但是这些方式在读写有些带命名空间的xml时就不知道怎么办了(例如把xaml文件当作xml文件来读写的时候)。

对于xaml文件,C#虽然能用XamlReader直接把xaml文件转换为对象,但是有的时候我们只是想取得其中一些字段,并不想转换为对象。

本文就以读取xml方式来读写xaml,给大家做一个示范。

其中xaml文件如下所示,文件名为test.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <sys:String x:Key="testkey">testStringInnerText</sys:String>
</ResourceDictionary>

1、读取xaml节点。

 1             XmlDocument xmlDoc = new XmlDocument();
 2             xmlDoc.Load("D:\test.xaml");
 3 
 4             //添加命名空间,这一步一定要有,否则读取不了
 5             XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager(xmlDoc.NameTable);
 6             xmlNamespaceManager.AddNamespace("x", "http://schemas.micorsoft.com/winfx/2006/xaml");
 7             xmlNamespaceManager.AddNamespace("sys", "clr-namespace:System;assembly=mscorlib");
 8 
 9 
10             XmlNodeList xmlNodeList = xmlDoc.DocumentElement.ChildNodes;
11             foreach (XmlNode childXmlNode in xmlNodeList)
12             {
13                 //读取数据节点(sys:String)
14                 string childName = childXmlNode.Name;
15                 //读取属性值(testKey)
16                 string childAttributesValue = childXmlNode.Attributes["x:Key"].Value;
17                 //读取节点文本(testStringInnerText)
18                 string childInnerText = childXmlNode.InnerText;
19                 //读取子节点
20                 XmlNodeList childXmlNodeList = childXmlNode.ChildNodes;
21             }

2、写入 xaml 节点

 1 var rootXmlDocument=new XmlDocument();
 2  
 3  XmlNode xmlNode=new XmlNode();
 4 //需要在这里生成一个xmlNode节点...
 5 //...
 6 //然后用appendchild方法插入
 7  rootXmlDocument.AppendChild(xmlNode);
 8  XmlElement rootXmlElement=(XmlElement)rootXmlDocument.ChildNodes[0];
 9  
10 //设置命名空间
11  rootXmlElement.SetAttribute("xmlns","http://schemas.microsoft.com/winfx/2006/xaml/presentation");
12  rootXmlElement.SetAttribute("xmlns:x","http://schemas.microsoft.com/winfx/2006/xaml");
13  rootXmlElement.SetAttribute("xmlns:sys","clr-namespace:System;assembly=mscorlib");
14  
15  rootXmlDocument.Save("D:\test.xaml");

欢迎转载,转载请注明来自Leaco的博客:http://www.cnblogs.com/Leaco/p/3170729.html

免责声明:文章转载自《C#读取带命名空间的xml,xaml文件的解决方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇qml focus相关springboot 有关拦截器遇到的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JAVA解析XML与C#解析XML(DOM,SAS,JDOM,DOM4J)

[1、XML解析总览] 本章导航-----XML解析思维导图 XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。 a:DOM解析---采用dom解析,会将xml文档全部载入到内存...

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。

二月 25, 2016 9:24:24 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclip...

(转)创建WebAPI文档的3个简单步骤

默认情况下,Microsoft.AspNet.WebApi.HelpPage创建的API帮助页不包含任何文档。 我们会看到所有的ApiController动作都列在No documentation available.上 要启用文档,我们只需要遵循三个简单步骤。 步骤1-在控制器级别上 为了测试目的,创建了一个新的ApiController,名为Docum...

Jaxb处理泛型,转化成xml字符串

前言:   最近的工作内容跟银行有些交互, 对方提供的数据格式采用xml(不是预期的json/protobuf). 为了开发方便, 需要借助jaxb来实现xml和java对象之间的映射. 它还是有点像jackson, 通过简单的注解配置, 就能轻松实现json和java对象的互转. 不过笔者在java类中引入泛型时, 还是踩了不少jaxb的坑, 这边做下笔...

用eggjs返回xml格式数据,前端解析xml

最近公司有个需求,需要从接口返回xml格式数据,再由前端解析后渲染。之前处理过类似的场景,接口是用java写的。本次想写个demo,用eggjs尝试返回xml格式接口,再由前端处理结果。 nodejs端 首先是eggjs,根据官方文档,先把应用跑起来。 接着需要安装依赖egg-view-ejs npm i egg-view-ejs -S 配置文件 /co...

springboot整合log4j2

前言   这里日志分两种。一种是tomcat的输出(系统)日志,一种是自己定义的日志。 环境   springboot版本1.5.6。(springboot1.4以上则使用log4j2,一定要注意版本) 1、springboot默认日志logback的日志输出样式如下: 2、排除springboot的默认日志logback,使用exclusion排除默认...