c# - 将 Visual Studio 项目文件解析为 XML

标签 c# xml visual-studio-2012 dynamic-language-runtime projects-and-solutions

使用动态 xml 解析器,我尝试将 VS 项目文件作为 XElement 加载。这是项目文件的精简版本:

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

该文件似乎已加载,因为当我使用 ToString() 时,我获取了内容。然而,当尝试挑选元素时,什么也没找到:

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 始终为 null。

binder.NameItemGroup

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

但是,当我从“项目”节点中删除所有属性时,子元素将按预期变为 ItemGroup XElement。

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

最佳答案

您可能要求空命名空间中的元素,为什么这些元素实际上位于 xmlns="http://schemas.microsoft.com/developer/msbuild/2003"中。看一下 XNamespace。

例如尝试:

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

关于c# - 将 Visual Studio 项目文件解析为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353628/

相关文章:

C#语法问题

python - 找到一个xml标签并将标签名称替换为python

javascript - 如何从 XML 中选择一个随机子元素并显示子元素;使用JS?

php - 在 Localhost XML 正在生成,但在服务器中它正在创建 Empty Xml

visual-studio-2012 - 我无法将现有项目 checkin 到 VisualStudio.com

C#:检查文件是否未锁定且可写

c# - xUnit和测试的多个数据记录

c# - 如何从 XmlElement 或 XPathNavigator 获取行号

c# - 调试 NuGet 包 - 不显示源的符号

c# - VS 2012 和 asp .net 中的 SelectParameter