在 XML 中查找一个节点下的值 [英] Find values under one node in XML

查看:28
本文介绍了在 XML 中查找一个节点下的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是要搜索的词的xml文件格式.

Below is xml file format from which words to be searched.

<Book>
<Page id="1">
<Head>Preface</Head>
<Body>
<Paragraph>
    <Line>
        <Word>
            <Char>T</Char>
            <Char>h</Char>
            <Char>i</Char>
            <Char>s</Char>
        </Word>
        <Word>
            <Char>-</Char>
        </Word>
        <Word>
            <Char>i</Char>
            <Char>s</Char>
        </Word>
        <Word>
            <Char>-</Char>
        </Word>
        <Word>
            <Char>s</Char>
            <Char>a</Char>
            <Char>m</Char>
            <Char>p</Char>
            <Char>l</Char>
            <Char>e</Char>
        </Word>
        <Word>
            <Char>-</Char>
        </Word>
        <Word>
            <Char>t</Char>
            <Char>e</Char>
            <Char>x</Char>
            <Char>t</Char>
        </Word>
    </Line>
</Paragraph>
</Body>
</Page>

我在 C# 中使用了以下 XPath 表达式来查找 Char 节点的值.

I used the below XPath expressions in C# to find values of Char Node.

XmlDocument objXmlDoc = new XmlDocument();
XmlNodeList objXmlNodeList;
objXmlDoc.Load(sFilePath);
objXmlNodeList = objXmlDoc.SelectNodes("//CHAR[translate(text(),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')='" + txtFindText.Text.ToUpper() + "']");

这里,如何从上面的 XML 文件中使用 XPath 获取完整的单词?

Here, how to get a complete word with XPath from above XML File ?

推荐答案

理论上是不可能的.原因是 XML/XPATH 不能确保顺序,因为查询的结果是一个节点集",根据定义,它是无重复节点的无序集合".

It is not possible theoretically. The reason is that XML/XPATH does not ensure order as the result of a query is a "node-set" which by definition is "an unordered collection of nodes without duplicates".

http://www.w3.org/TR/xpath/

尽管如此,您还是可以接近要求.比如你可以得到第一个词:

Nevertheless, you can get close to the requirement. For example, you can get the first word:

XmlDocument objXmlDoc = new XmlDocument();
XmlNodeList objXmlNodeList;
objXmlDoc.Load(sFilePath);
objXmlNodeList = objXmlDoc.SelectNodes("//Word");
string s = string.Empty;
XmlNodeList wordNodes = objXmlNodeList[0].ChildNodes;
foreach (XmlNode characterNode in wordNodes)
{
   s = s + characterNode.InnerText;
}

这篇关于在 XML 中查找一个节点下的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆