如何找到特定于XElement的子项(使用LINQ的c#中)?
我有这样一个XML文件:如何找到特定于XElement的子项(使用LINQ的c#中)?,linq,attributes,where,xelement,Linq,Attributes,Where,Xelement,我有这样一个XML文件: <root> <environment env="PROD"> <key name="Big Key" propagate="true" value="21" /> </environment> <environment env="PRE-PROD"> <key name="First Key" propagate="true" value="4" /> <key name=
<root>
<environment env="PROD">
<key name="Big Key" propagate="true" value="21" />
</environment>
<environment env="PRE-PROD">
<key name="First Key" propagate="true" value="4" />
<key name="Second Key" propagate="true" value="3" />
</environment>
</root>
我想检查该文件中是否存在密钥,以及传播项是否为true。
我设法获得了这两个System.Xml.Linq.XElement:key name=“First key”和key name=“Second key”。
但是我想只获取一个pKeyname(例如“第二个键”)我找不到如何
public static bool IsPropagate(string pXmlFileName, string pEnvironment, string pKeyname)
{
var doc = XElement.Load(pXmlFileName);
IEnumerable<XElement> childList = doc.Elements("environment")
.Where(elt => elt.Attribute("env").Value == pEnvironment)
.Elements();
if (childList.Any())
return true;
return false;
}
publicstaticboolspropagate(字符串pXmlFileName、字符串pEnvironment、字符串pKeyname)
{
var doc=XElement.Load(pXmlFileName);
IEnumerable childList=doc.Elements(“环境”)
.Where(elt=>elt.Attribute(“env”).Value==pEnvironment)
.Elements();
if(childList.Any())
返回true;
返回false;
}
任何帮助都将不胜感激 这将有助于获得准确的密钥:
public static bool IsPropagate(string pXmlFileName, string pEnvironment,
string pKeyname)
{
var doc = XElement.Load(pXmlFileName);
IEnumerable<XElement> childList = doc.Elements("environment")
.Where(elt => elt.Attribute("env").Value == pEnvironment)
.Elements()
.Where(a => a.Attribute("name").Value == pKeyname);
if (childList.Any())
return true;
return false;
}
public static bool IsPropagate(字符串pxml文件名、字符串pEnvironment、,
字符串(名称)
{
var doc=XElement.Load(pXmlFileName);
IEnumerable childList=doc.Elements(“环境”)
.Where(elt=>elt.Attribute(“env”).Value==pEnvironment)
.要素()
其中(a=>a.Attribute(“name”).Value==pKeyname);
if(childList.Any())
返回true;
返回false;
}
它通过添加“FirstOrDefault”来工作!谢谢
谢谢你的回答。不幸的是,我尝试了,但childList结果总是空的。如果没有最后一个where子句,它的答案是:
+[0]System.Xml.Linq.XElement
+[1]System.Xml.Linq.XElement
@user2382465,但对我来说,它工作得很好。在第二个Where子句之后,我需要添加类似“ToList”的内容,在我的例子中是“FirstOrDefault”。
public static bool IsPropagate(string pXmlFileName, string pEnvironment, string pKeyname)
{
var doc = XElement.Load(pXmlFileName);
XElement child = doc.Elements("environment")
.Where(elt => elt.Attribute("env").Value == pEnvironment)
.Elements()
.FirstOrDefault(a => a.Attribute("name").Value == pKeyname);
if (child != null)
return true;
return false;
}