Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 如何循环遍历具有相似元素名称和不同属性的xml以在每个节点上获取值?_Linq_Linq To Xml - Fatal编程技术网

Linq 如何循环遍历具有相似元素名称和不同属性的xml以在每个节点上获取值?

Linq 如何循环遍历具有相似元素名称和不同属性的xml以在每个节点上获取值?,linq,linq-to-xml,Linq,Linq To Xml,我正在尝试读取xml的特定节点值: <dsobject handle="Document-27897" classname="Document" baseClassname="Document"> <props> <prop name="summary" type="10">2952239651</prop> <prop name="highest_version_used" type="1">1</prop>

我正在尝试读取xml的特定节点值:

<dsobject handle="Document-27897" classname="Document" baseClassname="Document">
<props>
  <prop name="summary" type="10">2952239651</prop>
  <prop name="highest_version_used" type="1">1</prop>
  <prop name="routing_template_id" type="1" />
  <prop name="modified_date" type="4">Thu Jul 21 15:02:58 EDT 2011</prop>
  <prop name="locale" type="10">en</prop>
  <prop name="max_versions" type="1">4</prop>
  <prop name="canAddVersions" type="3">true</prop>
  <prop name="author" type="10"></prop>
  <prop name="title" type="10">806</prop>
  <prop name="create_date" type="4">Thu Jul 21 15:02:58 EDT 2011</prop>
  <prop name="description" type="11">SELF HELP (KVII) ASSOC-CITY CAPITAL</prop>
  <prop name="original_file_name" type="10">DOC20110721150230-853.pdf</prop>
  <prop name="webdav_title" type="10"></prop>
  <prop name="keywords" type="10"></prop>
  <prop name="add_as_draft" type="3">false</prop>
  <prop name="cfCopyID" type="10"></prop>
  <prop name="lastSynchronized" type="4" />
  <prop name="isPlaceholder" type="3">false</prop>
  <prop name="isRecord" type="3">false</prop>
  <prop name="rm_instance_handle" type="10" />
  <prop name="client_data" type="10"></prop>
  <prop name="copiedFrom" type="10"></prop>
  <prop name="cfSpecialWords" type="10"></prop>
  <prop name="autoMovePreferredVersion" type="3">true</prop>
  <prop name="size" type="1">1365070</prop>
  <prop name="isInteract" type="3">false</prop>
  <prop name="expiration_date" type="4" />
  <prop name="readyForDeclare" type="3">false</prop>
</props>

有人能给我指引正确的方向吗?谢谢

如果你知道这些元素存在,那就去做吧

string summary = xdoc.Root.Element("props").Elements("prop").First(e => (string)e.Attribute("name") == "summary").Value;

string description = xdoc.Root.Element("prop").Elements("prop").First(e => (string)e.Attribute("name") = "description").Value;
等等

如果有多个道具元素,并且您需要一个列表,例如摘要值,则使用

List<string> summaries = xdoc.Root.Elements("props").Elements("prop").Where(e => (string)e.Attribute("name") == "summary").Select(s => s.Value).ToList();
通过使用System.Xml.Linq,您可以执行以下操作

        var xmlFile = XDocument.Load("xmlpath");

        var propElements = xmlFile.Descendants("prop");
        var summaryProp = propElements.Where(e =>
            string.Compare(e.Attribute("name").Value, "summary"
            , StringComparison.CurrentCultureIgnoreCase) == 0)
            .FirstOrDefault();
        var summaryValue = summaryProp.Value;
变量summaryValue将保存值2952239651

此方法假定只有一个元素被命名为summary

更新

抱歉-以下代码可用于检索多个道具的摘要:

        var xmlFile = XDocument.Load("xmlpath");

        var propElements = xmlFile.Descendants("prop");
        var summaryProp = propElements.Where(e =>
            string.Compare(e.Attribute("name").Value, "summary"
            , StringComparison.CurrentCultureIgnoreCase) == 0)
            .Select(prop => prop.Value).ToList();
这会有帮助的
        var xmlFile = XDocument.Load("xmlpath");

        var propElements = xmlFile.Descendants("prop");
        var summaryProp = propElements.Where(e =>
            string.Compare(e.Attribute("name").Value, "summary"
            , StringComparison.CurrentCultureIgnoreCase) == 0)
            .FirstOrDefault();
        var summaryValue = summaryProp.Value;
        var xmlFile = XDocument.Load("xmlpath");

        var propElements = xmlFile.Descendants("prop");
        var summaryProp = propElements.Where(e =>
            string.Compare(e.Attribute("name").Value, "summary"
            , StringComparison.CurrentCultureIgnoreCase) == 0)
            .Select(prop => prop.Value).ToList();