解析Visual Studio项目文件的XML

编程入门 行业动态 更新时间:2024-10-25 06:28:44
本文介绍了解析Visual Studio项目文件的XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

使用动态xml解析器,我试图加载一个VS项目文件作为XElement。这是项目文件的缩小版本:

<?xml version =1.0encoding =utf-8 > < Project ToolsVersion =4.0DefaultTargets =Buildxmlns =schemas.microsoft/developer/msbuild/2003> < ItemGroup> < / ItemGroup> < ItemGroup> < / ItemGroup> < / Project>

文件似乎加载,当我ToString(),我得到的内容。但是,当试图选择元素时,什么也找不到:

XElement元素; public DynamicXmlParser(string fileName) { element = XElement.Load(fileName); } public override bool TryGetMember(GetMemberBinder binder,out object result) { result = null; if(element == null)return false; XElement子元素= element.Element(binder.Name); if(subElement == null)return false; result = new DynamicXmlParser(subElement); return true; }

subElement总是空的。

binder.Name 是 ItemGroup

dynamic xmlDoc = new DynamicXmlParser(SampleFileName); Debug.Pring(xmlDoc.ItemGroup.ToString());但是,当我从项目节点中删除所有属性时,subElement将按预期成为一个ItemGroup XElement。

为什么当属性在项目节点中时可以返回任何元素?

解决方案

您可能要求在空命名空间中的元素,为什么实际上这些元素存在于xmlns =schemas.microsoft/developer/msbuild/2003中。查看XNamespace。

例如尝试:

XNamespace msbuildNs =schemas.microsoft/developer/msbuild/2003 XElement subElement = element.Element(msbuildNs + binder.Name);

Using a dynamic xml parser, I'm trying to load a VS Project file as an XElement. Here is a slimmed down version of the project file:

<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="schemas.microsoft/developer/msbuild/2003"> <ItemGroup> </ItemGroup> <ItemGroup> </ItemGroup> </Project>

The file appears to load in the sense that when I ToString(), I get the contents. However, when trying to pick out elements, nothing is ever found:

XElement element; public DynamicXmlParser( string fileName ) { element = XElement.Load( fileName ); } public override bool TryGetMember( GetMemberBinder binder, out object result ) { result = null; if ( element == null ) return false; XElement subElement = element.Element( binder.Name ); if ( subElement == null ) return false; result = new DynamicXmlParser( subElement ); return true; }

subElement is always null.

binder.Name is ItemGroup

dynamic xmlDoc = new DynamicXmlParser( SampleFileName ); Debug.Pring(xmlDoc.ItemGroup.ToString());

However, when I remove all attributes from the Project node, subElement becomes an ItemGroup XElement as expected.

Why can I return any elements when the attributes are in the project node?

解决方案

You are probably asking for elements in empty namespace why in fact the elements live in xmlns="schemas.microsoft/developer/msbuild/2003". Take a look at XNamespace.

For instance try:

XNamespace msbuildNs = "schemas.microsoft/developer/msbuild/2003" XElement subElement = element.Element(msbuildNs + binder.Name);

更多推荐

解析Visual Studio项目文件的XML

本文发布于:2023-11-16 19:55:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1607240.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件   项目   Visual   Studio   XML

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!