#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 из файла.