Jus*_*elf 2 c# xml dynamic-language-runtime project-files visual-studio-2012
使用动态xml解析器,我正在尝试将VS Project文件作为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>
Run Code Online (Sandbox Code Playgroud)
该文件似乎加载的意义是当我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;
}
Run Code Online (Sandbox Code Playgroud)
subElement始终为null.
binder.Name
是 ItemGroup
dynamic xmlDoc = new DynamicXmlParser( SampleFileName );
Debug.Pring(xmlDoc.ItemGroup.ToString());
Run Code Online (Sandbox Code Playgroud)
但是,当我从Project节点中删除所有属性时,subElement将按预期变为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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1496 次 |
最近记录: |