1

我有一个这样的 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="Second Key" propagate="true" value="3" />
 </environment>
</root>

我想检查该文件中是否存在密钥,以及传播项是否为真。我设法得到那些 2 System.Xml.Linq.XElement : key name="First Key" AND 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;
}

任何帮助将不胜感激!

4

2 回答 2

1

这将有助于获得确切的密钥:

       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;
        }
于 2013-05-14T16:30:12.617 回答
1

它通过添加“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;
    }
于 2013-05-15T14:24:11.577 回答