Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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
C# 通过linq到xml选择属性值_C#_Xml_Linq To Xml - Fatal编程技术网

C# 通过linq到xml选择属性值

C# 通过linq到xml选择属性值,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,在我的xml文件中,我如何通过linq to xml为servicesignment元素中的TagId属性选择值 注意:字符串属性中的此xml不在xml文件中 <AnchoredXml xmlns="urn:schema:Microsoft.Rtc.Management.ScopeFramework.2008" SchemaWriteVersion="1"> <Key ScopeClass="Global"> <SchemaId Namespace="u

在我的xml文件中,我如何通过linq to xml为
servicesignment
元素中的
TagId
属性选择值

注意:字符串属性中的此xml不在xml文件中

<AnchoredXml xmlns="urn:schema:Microsoft.Rtc.Management.ScopeFramework.2008" SchemaWriteVersion="1">
  <Key ScopeClass="Global">
    <SchemaId Namespace="urn:schema:Microsoft.Rtc.Management.Settings.ServiceAssignment.2008" ElementName="ServiceAssignments" />
    <AuthorityId Class="Host" InstanceId="00000000-0000-0000-0000-000000000000" />
  </Key>
  <Dictionary Count="1">
    <Item>
      <Key />
      <Value Signature="2ffb6b0d-0239-4016-b08b-40520d1687ff">
        <ServiceAssignments xmlns="urn:schema:Microsoft.Rtc.Management.Settings.ServiceAssignment.2008">
          <ServiceAssignment TagId="659550892">
            <Component Name="Registrar">
              <ServiceId xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008" SiteId="1" RoleName="Registrar" Instance="1" />
            </Component>
            <Component Name="PresenceFocus">
              <ServiceId xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008" SiteId="1" RoleName="UserServices" Instance="1" />
            </Component>
          </ServiceAssignment>
          <ServiceAssignment TagId="911048693">
            <Component Name="Registrar">
              <ServiceId xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008" SiteId="1" RoleName="Registrar" Instance="2" />
            </Component>
            <Component Name="PresenceFocus">
              <ServiceId xmlns="urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008" SiteId="1" RoleName="UserServices" Instance="2" />
            </Component>
          </ServiceAssignment>
        </ServiceAssignments>
      </Value>
    </Item>
  </Dictionary>
</AnchoredXml>

您可以尝试使用此代码

var result = from item in XElement.Load("YourFile.xml").Root.Elements("ServiceAssignment")
             where item.Attribute("TagId") == value
             select item ; 

文档中有带名称空间的元素,因此需要将它们包含在查询中

XNamespace itemNs = "urn:schema:Microsoft.Rtc.Management.ScopeFramework.2008";
XNamespace assignmentNs = "urn:schema:Microsoft.Rtc.Management.Settings.ServiceAssignment.2008";
var query =
    from item in doc.Descendants(itemNs + "Item")
    from assignment in item.Descendants(assignmentNs + "ServiceAssignment")
    select (long)assignment.Attribute("TagId");

您的XML包含名称空间,因此不能只比较全名。
如果您不关心名称空间,可以使用:

string-xmlString=
@"
";
var doc=XDocument.Parse(xmlString);
var TagIds=doc.subjects()
.要素()
。其中(e=>
e、 HasAttributes&
e、 Name.LocalName.Equals(“服务分配”)&&
e、 属性(“TagId”)!=null)
.Select(e=>e.Attribute(“TagId”).Value);

在路径中给我非法字符。
XNamespace itemNs = "urn:schema:Microsoft.Rtc.Management.ScopeFramework.2008";
XNamespace assignmentNs = "urn:schema:Microsoft.Rtc.Management.Settings.ServiceAssignment.2008";
var query =
    from item in doc.Descendants(itemNs + "Item")
    from assignment in item.Descendants(assignmentNs + "ServiceAssignment")
    select (long)assignment.Attribute("TagId");
var result = from element in doc.Root.Descendants()
             where element.Name.LocalName == "ServiceAssignment"
             select (int)element.Attribute("TagId");
string xmlString =
                @"<AnchoredXml xmlns='urn:schema:Microsoft.Rtc.Management.ScopeFramework.2008' SchemaWriteVersion='1'>
  <Key ScopeClass='Global'>
    <SchemaId Namespace='urn:schema:Microsoft.Rtc.Management.Settings.ServiceAssignment.2008' ElementName='ServiceAssignments' />
    <AuthorityId Class='Host' InstanceId='00000000-0000-0000-0000-000000000000' />
  </Key>
  <Dictionary Count='1'>
    <Item>
      <Key />
      <Value Signature='2ffb6b0d-0239-4016-b08b-40520d1687ff'>
        <ServiceAssignments xmlns='urn:schema:Microsoft.Rtc.Management.Settings.ServiceAssignment.2008'>
          <ServiceAssignment TagId='659550892'>
            <Component Name='Registrar'>
              <ServiceId xmlns='urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008' SiteId='1' RoleName='Registrar' Instance='1' />
            </Component>
            <Component Name='PresenceFocus'>
              <ServiceId xmlns='urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008' SiteId='1' RoleName='UserServices' Instance='1' />
            </Component>
          </ServiceAssignment>
          <ServiceAssignment TagId='911048693'>
            <Component Name='Registrar'>
              <ServiceId xmlns='urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008' SiteId='1' RoleName='Registrar' Instance='2' />
            </Component>
            <Component Name='PresenceFocus'>
              <ServiceId xmlns='urn:schema:Microsoft.Rtc.Management.Deploy.Topology.2008' SiteId='1' RoleName='UserServices' Instance='2' />
            </Component>
          </ServiceAssignment>
        </ServiceAssignments>
      </Value>
    </Item>
  </Dictionary>
</AnchoredXml>";

var doc = XDocument.Parse(xmlString);       
var TagIds = doc.Descendants()
                .Elements()
                .Where(e => 
                            e.HasAttributes && 
                            e.Name.LocalName.Equals("ServiceAssignment") && 
                            e.Attribute("TagId") != null)
                .Select(e => e.Attribute("TagId").Value);