我有这个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是空的。有什么问题?
全部谢谢
答案 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;
}