通过LINQ获取XML [英] fetching XML through LINQ
本文介绍了通过LINQ获取XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在以下WSDL(XML)
In following WSDL(XML)
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://ttdev.com/ss"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-utility-1.0.xsd"
name="SecureService" targetNamespace="http://ttdev.com/ss">
<wsp:Policy wsu:Id="p1">
<sp:SignedParts>
<sp:Body />
</sp:SignedParts>
</wsp:Policy>
<wsp:Policy wsu:Id="p2">
<sp:SignedParts>
<sp:Body />
</sp:SignedParts>
</wsp:Policy>
<wsp:Policy wsu:Id="p3">
<sp:SignedParts>
<sp:Body />
</sp:SignedParts>
</wsp:Policy>
<wsdl:binding name="SecureServiceSOAP" type="tns:SecureService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="concat">
<wsp:PolicyReference URI="#p1" wsdl:required="true" />
<soap:operation soapAction="http://ttdev.com/ss/concat" />
<wsdl:input>
<soap:body parts="concatRequest" use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body parts="concatResponse" use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SecureService">
<wsdl:port binding="tns:SecureServiceSOAP" name="SecureServiceSOAP">
<soap:address location="http://localhost:8080/axis2/services/SecureService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
我想从XML中获取以下XML部分
I want to fetch following XML part from the XML
<wsp:Policy wsu:Id="p1">
<sp:SignedParts>
<sp:Body />
</sp:SignedParts>
</wsp:Policy>
我正在编写后续的LINQ查询
I m writing followign LINQ Query
XDocument wsdlDocument = XDocument.Load(_wsdlPath);
XName operationElementName = XName.Get("operation", "http://schemas.xmlsoap.org/wsdl/");
XName policyReferenceElementName = XName.Get("PolicyReference", "http://schemas.xmlsoap.org/ws/2004/09/policy");
XName policyElementName = XName.Get("Policy", "http://schemas.xmlsoap.org/ws/2004/09/policy");
XName idAttributeName = XName.Get("id", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-utility-1.0.xsd");
var operationPolicy = from policy in wsdlDocument.Descendants(policyElementName)
where policy.Attribute(idAttributeName).Value == uritemp //uritemp = "p1"
select policy.ToString();
string resultingXML = operationPolicy.FirstOrDefault();
但是它不起作用,请告诉我我在哪里出错.
but it is not working , please tell me where I am making mistake.
推荐答案
XDocument wsdlDocument = XDocument.Load(_wsdlPath);
XName operationElementName = XName.Get(Constants.OPERATION, Constants.WSDL_NS);
XName policyReferenceElementName = XName.Get(Constants.POLICY_REFERENCE, Constants.NamespacePath.POLICY);
XName policyElementName = XName.Get(Constants.POLICY, Constants.NamespacePath.POLICY);
XName idAttributeName = XName.Get("Id", Constants.NamespacePath.WSSECURITY);
var uriNo = from operation in wsdlDocument.Descendants(operationElementName)
where operation.HasAttributes && operation.Attribute(Constants.NAME).Value == _operationSelected
from policyReference in operation.Descendants(policyReferenceElementName)
where policyReference.HasAttributes && policyReference.Attribute(Constants.URI).Value.StartsWith(Constants.HASH)
select policyReference.Attribute(Constants.URI).Value.Substring(1);
string uritemp = uriNo.FirstOrDefault().ToString();
var operationPolicy = from policy in wsdlDocument.Descendants(policyElementName)
where policy.HasAttributes && policy.Attribute(idAttributeName).Value == uritemp
select policy;
string temp = operationPolicy.FirstOrDefault().ToString();
return temp;
这篇关于通过LINQ获取XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文