Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xpath无法分析XML:需要命名空间管理器或XsltContext_C#_Xml_Xpath - Fatal编程技术网

C# Xpath无法分析XML:需要命名空间管理器或XsltContext

C# Xpath无法分析XML:需要命名空间管理器或XsltContext,c#,xml,xpath,C#,Xml,Xpath,我希望找到元素 r with s:id = {5FF71EB5-BE2D-49DC-9442-B3DCE15067C9} 它的带有 uid="{00000000-0000-0000-0000-000000000000}" 然后在最后输出s:name(“Bar1”) 我已经编写了这段xpath,它正是这样做的 string(//r[@s:id='{5FF71EB5-BE2D-49DC-9442-B3DCE15067C9}']//rule[@uid='{00000000:0000:0000:0

我希望找到元素

r with s:id = {5FF71EB5-BE2D-49DC-9442-B3DCE15067C9}
它的
带有

uid="{00000000-0000-0000-0000-000000000000}" 
然后在最后输出
s:name(“Bar1”)

我已经编写了这段xpath,它正是这样做的

string(//r[@s:id='{5FF71EB5-BE2D-49DC-9442-B3DCE15067C9}']//rule[@uid='{00000000:0000:0000:0000:000000000000}']/@s:name)
验证地点:

我的错误是:需要名称空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数

我通过大量的挖掘发现我的名称空间没有正确设置。但我一辈子都搞不清楚我做错了什么


我的命名空间分配应该是什么样子的?

您必须向导航器提供命名空间管理器。处理异常,但SelectSingleNode返回null。因此,我更改了XPath(前缀//以搜索所有节点)。这会找到节点,但Value属性是空字符串,因此我将其更改为OuterXml。我的最终版本如下:

var xpath = "//r[@s:id='{5FF71EB5-BE2D-49DC-9442-B3DCE15067C9}']//rule[@uid='{00000000-0000-0000-0000-000000000000}']";
var result = nav.SelectSingleNode(xpath, xmlnsManager);
Console.WriteLine(result.OuterXml);
// Prints: "<rule uid=\"{00000000-0000-0000-0000-000000000000}\" s:name=\"Bar1\" xmlns:s=\"s\"></rule>"
var xpath=“//r[@s:id=”{5FF71EB5-BE2D-49DC-9442-B3DCE15067C9}]//规则[@uid=”{00000000-0000-0000-00000000000000}];
var result=nav.SelectSingleNode(xpath,xmlnsManager);
WriteLine(result.OuterXml);
//印刷品:“
var xmlStringReader = new StringReader(xmlfile);

XmlReaderSettings set = new XmlReaderSettings();
set.ConformanceLevel = ConformanceLevel.Fragment;

XPathDocument doc =
    new XPathDocument(XmlReader.Create(xmlStringReader, set));

XPathNavigator nav = doc.CreateNavigator();
var xmlnsManager = new XmlNamespaceManager(nav.NameTable);

xmlnsManager.AddNamespace("p", "p" );
xmlnsManager.AddNamespace("s", "s" );

var xpath ="r[@s:id='{5FF71EB5-BE2D-49DC-9442-B3DCE15067C9}']//rule[@uid='{00000000-0000-0000-0000-000000000000}']";
string result = nav.SelectSingleNode(xpath).Value;
var xpath = "//r[@s:id='{5FF71EB5-BE2D-49DC-9442-B3DCE15067C9}']//rule[@uid='{00000000-0000-0000-0000-000000000000}']";
var result = nav.SelectSingleNode(xpath, xmlnsManager);
Console.WriteLine(result.OuterXml);
// Prints: "<rule uid=\"{00000000-0000-0000-0000-000000000000}\" s:name=\"Bar1\" xmlns:s=\"s\"></rule>"