相关疑难解决方法(0)

带有命名空间的XPath选择节点

它是一个.vbproj,看起来像这样

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <ProjectGuid>15a7ee82-9020-4fda-a7fb-85a61664692d</ProjectGuid>
Run Code Online (Sandbox Code Playgroud)

我想得到的只是ProjectGuid,但是当命名空间存在时它不起作用......

 Dim xmlDoc As New XmlDocument()
 Dim filePath As String = Path.Combine(mDirectory, name + "\" + name + ".vbproj")
 xmlDoc.Load(filePath)
 Dim value As Object = xmlDoc.SelectNodes("/Project/PropertyGroup/ProjectGuid")
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个问题?

xml vb.net xpath xml-namespaces

64
推荐指数
3
解决办法
6万
查看次数

XmlDocument.SelectSingleNode和xmlNamespace问题

我正在将字符串加载到包含以下结构的XML文档:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">                  
  <ItemGroup>
    <Compile Include="clsWorker.cs" />        
  </ItemGroup>      
</Project>
Run Code Online (Sandbox Code Playgroud)

然后我将所有加载到xmldocument:

XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(Xml);
Run Code Online (Sandbox Code Playgroud)

然后出现以下问题:

XmlNode Node = xmldoc.SelectSingleNode("//Compile"); // return null
Run Code Online (Sandbox Code Playgroud)

当我从根元素(Project)中删除xmlns属性时,它的工作正常,如何改进我的SelectSingleNode以返回相关元素?

c# xml xmldocument selectnodes selectsinglenode

44
推荐指数
3
解决办法
6万
查看次数

XPATHS和默认命名空间

XPath背后的故事是什么以及对名称空间的支持?XPath作为规范在命名空间之前吗?如果我有一个文档,其中元素已被赋予默认命名空间:

<foo xmlns="uri" />
Run Code Online (Sandbox Code Playgroud)

似乎某些XPath处理器库//foo由于名称空间而无法识别,而其他库将会识别.我的团队所考虑的选项是使用正则表达式向XPath添加名称空间前缀(可以通过XmlNameTable添加名称空间前缀),但这似乎很脆弱,因为在节点测试时XPath是一种非常灵活的语言.

是否有适用于此的标准?

我的方法有点hackish但似乎工作正常; 我xmlns用搜索/替换删除声明,然后应用XPath.

string readyForXpath = Regex.Replace(xmldocument, "xmlns=\".+\"", String.Empty );
Run Code Online (Sandbox Code Playgroud)

这是一种公平的方法还是有人以不同方式解决了这个问

c# xml xpath namespaces

16
推荐指数
2
解决办法
1万
查看次数

我的XPath/XML出了什么问题?

我在这个xml上尝试一个非常基本的XPath (与下面相同),它没有找到任何东西.我正在尝试.NET和这个网站,以及XPaths等//PropertyGroup,/PropertyGroup并且//MSBuildCommunityTasksPath根本不适合我(他们编译但返回零结果).

源XML:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <!-- $Id: FxCop.proj 114 2006-03-14 06:32:46Z pwelter34 $ -->
    <PropertyGroup>
        <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\MSBuild.Community.Tasks\bin\Debug</MSBuildCommunityTasksPath>
    </PropertyGroup>
    <Import
        Project="$(MSBuildProjectDirectory)\MSBuild.Community.Tasks\MSBuild.Community.Tasks.Targets" />
    <Target Name="DoFxCop">
        <FxCop TargetAssemblies="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.dll"
            RuleLibraries="@(FxCopRuleAssemblies)" 
            AnalysisReportFileName="Test.html"
            DependencyDirectories="$(MSBuildCommunityTasksPath)" 
            FailOnError="True"
            ApplyOutXsl="True"
            OutputXslFileName="C:\Program Files\Microsoft FxCop 1.32\Xml\FxCopReport.xsl" />
    </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

xml xpath namespaces

10
推荐指数
1
解决办法
3400
查看次数

XmlDocument 忽略 xmlns

我有以以下开头的 XHTML 文件:

<html xmlns="http://www.w3.org/1999/xhtml">
Run Code Online (Sandbox Code Playgroud)

我加载它:

XmlDocument xml = new XmlDocument();
StringReader sr = new StringReader(html);
XmlTextReader xmltr = new XmlTextReader(sr);
xmltr.Namespaces = false;
xml.Load(xmltr);
Run Code Online (Sandbox Code Playgroud)

当我打电话时,xml.InnerXml我总是遇到The 'xmlns' attribute is bound to the reserved namespace 'http://www.w3.org/2000/xmlns/'.异常并且无法访问我的 XmlDocument 的内部 xml。如何在加载期间摆脱 xmlns?

解决方案是:

XmlNode xmln = xml.SelectSingleNode("//html");
if (xmln != null)
    ((XmlElement)xmln).RemoveAttribute("xmlns");
Run Code Online (Sandbox Code Playgroud)

c# xmldocument xml-namespaces

5
推荐指数
1
解决办法
1万
查看次数