0

我编写了一个专门搜索给定完整xpath内容并返回内部文本的方法。但是由于我正在处理的文件都有唯一的节点名称,我想以某种方式做到这一点,只有传递节点名称才能完成这项工作。

我的代码目前的样子:

public string FileInfo(string info)
{
    switch (info)
    {
        //FileInfo
        case "fileCreator":
            fileCreator = ztr.SelectSingleNode("//Document/FileInfo/Creator").InnerText;
            return fileCreator;
        case "fileName":
            fileName = ztr.SelectSingleNode("//Document/FileInfo/Name").InnerText;
            return fileName;
      //And so on with lots of other cases!!!

我怎样才能让它以某种方式搜索第一次出现的info作为 xml 节点的字符串,这样我就不必愚蠢并编写所有这些 switch 语句......

更新

请注意,并非我想要的所有东西都位于FileInfo节点中......我想要搜索我传递给它的节点的方法!或者更好地说我想将节点本身的名称传递给这个方法并获取它的值。抱歉,如果我在此编辑之前感到困惑!

xml 文件中的更多示例:

/Document/RuntimeInfo/Operator

所以我想将“运算符”传递到我的方法中,我得到了它的价值!应该由方法来发现正确的路径。拍子是独一无二的,所以实施这种方法不是一个坏主意。

4

4 回答 4

1

这不能完成工作吗?

var value = ztr.SelectSingleNode(string.Format("//{0}", info).InnerText;

于 2012-07-11T14:39:17.613 回答
1
return ztr.SelectSingleNode(string.Format("//Document/FileInfo/{0}", 
                            info.Replace("file", "").InnerText;

编辑

如果搜索到的节点始终处于相同的嵌套级别,您可能会使用通配符

return ztr.SelectSingleNode(string.Format("//Document/*/{0}", 
                                info).InnerText;

顺便说一句,在您的示例中,您通过fileCreator查找Creator节点。错字?

于 2012-07-11T14:41:23.673 回答
0

尝试,

return ztr.SelectSingleNode(string.Format("//{0}[contains(name(..),'Info')]", info));

如果infoOperator,它将返回第一个名称Operator中包含父节点的节点Info

于 2012-07-11T16:09:31.200 回答
0

使用这个 XPath:

//Document/FileInfo/[0]

你的代码可以是这样的:

public string FileInfo(string info)
{
    return ztr.SelectSingleNode("//Document/FileInfo/[0]").InnerText;
}

在此处查看有关 xpath的更多信息。

于 2012-07-11T17:56:10.527 回答