如何使用C#解析xpath if语句

时间:2014-09-03 06:15:33

标签: c# xml xpath

我有一个包含if语句的xpath。我想用c#来评估它。如果我在xpath中没有任何功能,我可以使用

node.SelectSingleNode(xpath);

当我尝试使用if语句执行此操作时,我收到无效的令牌错误。

这是我的xpath:

if (substring-before(substring-after(//IzdaniRacunEnostavni/@xsi:noNamespaceSchemaLocation,'http://www.gzs.si/e-poslovanje/sheme/'),'_EnostavniRacun.xsd')='eSLOG_1-6') then //Postavka/StevilkaVrstice[text()!='']/../../ZneskiPostavke/VrstaZneskaPostavke[text() ='203']/../ZnesekPostavke else     //Postavka/StevilkaVrstice[text() !='']/../../ZneskiPostavke/VrstaZneskaPostavke[text() ='66']/../ZnesekPostavke

如果我使用http://videlibri.sourceforge.net/cgi-bin/xidelcgi测试此xpath,则显示为有效。

1 个答案:

答案 0 :(得分:0)

将Cpath语句中的if-else部分转换为C#语句可能是使用C#和XPath 1.0时最好的选择。 xpath if-else块的格式化版本如下所示:

if (substring-before(substring-after(//IzdaniRacunEnostavni/@xsi:noNamespaceSchemaLocation,'http://www.gzs.si/e-poslovanje/sheme/'),'_EnostavniRacun.xsd')='eSLOG_1-6') 

then 

//Postavka/StevilkaVrstice[text()!='']/../../ZneskiPostavke/VrstaZneskaPostavke[text() ='203']/../ZnesekPostavke 

else    

//Postavka/StevilkaVrstice[text() !='']/../../ZneskiPostavke/VrstaZneskaPostavke[text() ='66']/../ZnesekPostavke

尝试将它们转换为此C#if-else块:

var xpathIfResult = node.SelectSingleNode("//IzdaniRacunEnostavni[substring-before(substring-after(@xsi:noNamespaceSchemaLocation,'http://www.gzs.si/e-poslovanje/sheme/'),'_EnostavniRacun.xsd')='eSLOG_1-6']");
if(xpathIfResult != null)
{
    result = node.SelectSingleNode("//Postavka/StevilkaVrstice[text() !='']/../../ZneskiPostavke/VrstaZneskaPostavke[text() ='66']/../ZnesekPostavke");
}
else
{
    result = node.SelectSingleNode("//Postavka/StevilkaVrstice[text() !='']/../../ZneskiPostavke/VrstaZneskaPostavke[text() ='66']/../ZnesekPostavke");
}