如何在c#中获取xml节点?

时间:2012-09-03 10:09:17

标签: c# xml xpath

我正在尝试从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>

4 个答案:

答案 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表达式以双斜杠开头会更好“//”