我正在尝试从xmldocument获取成本节点,但我无法弄清楚如何设置正确的xpath表达式。这是我的c#代码:
XmlNode n = reportFields.SelectSingleNode(field[1].Trim());
field [1]是我的xpath,后面是一个字符串:
" /Report/Tablix6/RowGroup_Collection/RowGroup/@Cost"
这是reportFields的innerXml属性的一部分:
"<?xml version=\"1.0\" encoding=\"utf-8\"?>
<Report Name=\"Sample\">
<Tablix6>
<RowGroup_Collection>
<RowGroup Cost=\"1199\" />
</RowGroup_Collection>
</Tablix6>
有什么想法吗?
编辑:
执行此代码后,n为空。
EDIT2:这是xmlDocument的更新版本:
<?xml version="1.0" encoding="utf-8" ?>
<Report xsi:schemaLocation="Telephony http://serverName"
Name="Telephony"
Textbox1="Telephony total cost"
Textbox6="Updated: 2010-4"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="Telephony">
<Tablix6>
<RowGroup_Collection>
<RowGroup CostSEK="13.908239364624" />
</RowGroup_Collection>
</Tablix6>
答案 0 :(得分:1)
好的,我设法解决了。结果我必须创建一个命名空间并修改我的XPath字符串以反映:
的XPath:
ns:Report/ns:Tablix6/ns:RowGroup_Collection/ns:RowGroup/@CostSEK
C#:
XmlNamespaceManager namespaces = new XmlNamespaceManager(reportFields.NameTable);
namespaces.AddNamespace("ns", "Telephony");
XmlNode n = reportFields.SelectSingleNode(field[1].Trim(), namespaces);
答案 1 :(得分:0)
尝试
XmlNode n = reportFields.SelectSingleNode("/Report/Tablix6/RowGroup_Collection/RowGroup").Attributes["Cost"];
然后,您可以使用n.Value访问节点的值,所以
Console.Writeline(n.Value);
应输出“1199”
答案 2 :(得分:0)
请尝试:
object attr = reportFields.SelectSingleNode(field[1].Trim()).Value;
答案 3 :(得分:-1)
"//Report/Tablix6/RowGroup_Collection/RowGroup/@Cost"
我可以搞错,但我认为如果XPath表达式以双斜杠开头会更好“//”