XPath C # возвращает xml-узел с атрибутом, который содержит определенное значение

#c# #xpath

#c# #xpath

Вопрос:

У меня есть XML, из которого я хочу извлечь значение узла :

                             <oslc:creation rdf:resource="https://timo-pcvirtual:9443/qm/oslc_qm/contexts/_yAh_8gCIEeS7hY-fywlluw/resources/com.ibm.rqm.planning.VersionedExecutionScript" />
                            <oslc:resourceShape rdf:resource="https://timo-pcvirtual:9443/qm/oslc_qm/contexts/_yAh_8gCIEeS7hY-fywlluw/shape/creation/com.ibm.rqm.planning.VersionedExecutionScript" />
                            <oslc:resourceType rdf:resource="http://open-services.net/ns/qm#TestScript" />
                        </oslc:CreationFactory>
                    </oslc:creationFactory>
                    <oslc:creationFactory>
                        <oslc:CreationFactory>
                            <dcterms:title>Default creation factory for TestResult</dcterms:title>
                            <oslc:creation rdf:resource="https://timo-pcvirtual:9443/qm/oslc_qm/contexts/_yAh_8gCIEeS7hY-fywlluw/resources/com.ibm.rqm.execution.ExecutionResult" />
                            <oslc:resourceShape rdf:resource="https://timo-pcvirtual:9443/qm/oslc_qm/contexts/_yAh_8gCIEeS7hY-fywlluw/shape/creation/com.ibm.rqm.execution.ExecutionResult" />
                            <oslc:resourceType rdf:resource="http://open-services.net/ns/qm#TestResult" />
                        </oslc:CreationFactory>
                    </oslc:creationFactory>
                    <oslc:creationFactory>
                        <oslc:CreationFactory>
                            <dcterms:title>Default creation factory for TestCase</dcterms:title>
                            <oslc:creation rdf:resource="https://timo-pcvirtual:9443/qm/oslc_qm/contexts/_yAh_8gCIEeS7hY-fywlluw/resources/com.ibm.rqm.planning.VersionedTestCase" />
                            <oslc:resourceShape rdf:resource="https://timo-pcvirtual:9443/qm/oslc_qm/contexts/_yAh_8gCIEeS7hY-fywlluw/shape/creation/com.ibm.rqm.planning.VersionedTestCase" />
                            <oslc:resourceType rdf:resource="http://open-services.net/ns/qm#TestCase" />
                        </oslc:CreationFactory>
                    </oslc:creationFactory>
                    <oslc:creationFactory>
                        <oslc:CreationFactory>
                            <dcterms:title>Default creation factory for TestExecutionRecord</dcterms:title>
                            <oslc:creation rdf:resource="https://timo-pcvirtual:9443/qm/oslc_qm/contexts/_yAh_8gCIEeS7hY-fywlluw/resources/com.ibm.rqm.execution.TestcaseExecutionRecord" />
                            <oslc:resourceShape rdf:resource="https://timo-pcvirtual:9443/qm/oslc_qm/contexts/_yAh_8gCIEeS7hY-fywlluw/shape/creation/com.ibm.rqm.execution.TestcaseExecutionRecord" />
                            <oslc:resourceType rdf:resource="http://open-services.net/ns/qm#TestExecutionRecord" />
                        </oslc:CreationFactory>
                    </oslc:creationFactory>
                    <oslc:creationFactory>
                        <oslc:CreationFactory>
                            <dcterms:title>Default creation factory for 
    </rdf:RDF>
  

и я хочу получить

 <oslc:queryCapability><oslc:QueryCapability> attribute value of oslc:queryBase (which is :"https://timo-pcvirtual:9443/qm/oslc_qm/contexts/_yAh_8gCIEeS7hY-fywlluw/resources/com.ibm.rqm.planning.VersionedTestCase")
  

Я использую c # и этот формат, но не возвращает значение атрибута…Пожалуйста, помогите …

     XPathNavigator nav = projectAreaContent.CreateNavigator();
    XmlNamespaceManager manager = new XmlNamespaceManager(nav.NameTable);
    manager.AddNamespace("oslc", "http://open-services.net/ns/core#");
    manager.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
    XPathNodeIterator iterator = nav.Select("//oslc:queryBase[contains(@rdf:resource,'VersionedTestCase')]", manager);
  

Комментарии:

1. Я поместил полный XML в: link

Ответ №1:

Использование Linq для Xml:

 XNamespace oslc = "http://open-services.net/ns/core#";
XNamespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";

var list = XDocument.Parse(xmlstring)
          .Descendants(oslc   "QueryCapability")
          .Select(q => q.Element(oslc   "queryBase").Attribute(rdf   "resource").Value)
          .ToList();
  

Вы можете использовать XDocument.Load(filename) для загрузки xml из файла.