如何使用select查询读取xml?

时间:2014-01-28 10:31:52

标签: c# xml xmldocument

我有这个XML文件。

<tokens>
    <token id="1" >
      <id>1</id>
      <nome>"Mare"</nome>
      <numeroSillabe>"2"</numeroSillabe>
      <sillabaIniziale>"ma"</sillabaIniziale>
      <immagine>"mare.jpg"</immagine>
      <rima>"are"</rima>
    </token>
<tokens>

所以我想选择所有令牌都有rima = are。 这是我的代码:

XmlDocument document = new XmlDocument();
document.Load("Content\\Token.xml");
String query = "//token";
            if (isRima)
            {
                query += "[rima='are']";
            }
 List<XmlNode> mappa = document.SelectNodes(query).OfType<XmlNode>().ToList();

但是mappa是空的。有什么问题?

全部谢谢

3 个答案:

答案 0 :(得分:0)

因此,rima元素的内容为"are"(带双引号),您应该将这些引号添加到您正在检查的内容中​​(并将其转义):

query += "[rima='\"are\"']";

附注 - 考虑使用Linq to Xml来解析Xml。您可以根据条件撰写查询:

var xdoc = XDocument.Load("Content\\Token.xml");
var query = xdoc.Root.Elements("token");
if (isRima)
    query = query.Where(t => (string)t.Element("rima") == "\"are\"");

答案 1 :(得分:0)

您可以使用Linq查询xml:

var result = document.Element("tokens")
                   .Elements("token")
                   .Where(x => (string)x.Element("rima") == "\"are\"");

不要忘记System.Linq。“

答案 2 :(得分:0)

XmlNodeList res = doc.SelectNodes("//tokens//token//rima[.='" + "\"are\"" + "']");

通过这个你将获得所有rima节点的值为“are”。

然后,如果你需要令牌节点,请像这样使用res循环。

        foreach (XmlNode item in res)
        {
            XmlNode tokenNode = item.ParentNode;
        }