【问题标题】:Moving namespace attributes from the XML to Top将命名空间属性从 XML 移动到顶部
【发布时间】:2011-12-26 06:24:30
【问题描述】:

你好朋友,我有以下类型的 XML

<wsp:Policy wsu:Id="p1" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
  <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
    <sp:Body />
  </sp:SignedParts>
</wsp:Policy>

但是我想把它转换成下面的格式

<wsdl:definitions
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>

<wsp:Policy wsu:Id="p1"  >
 <sp:SignedParts>
 <sp:Body />
 </sp:SignedParts>
 </wsp:Policy>

</wsdl:definitions>

您能告诉我如何通过 LINQ 或任何其他 API 执行此操作

【问题讨论】:

    标签: c# xml linq wsdl linq-to-xml


    【解决方案1】:
     private string GetPolicy()
            {
                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 operation in wsdlDocument.Descendants(operationElementName)
                                      where operation.Attribute("name").Value == _operationSelected
                                      from policyReference in operation.Descendants(policyReferenceElementName)
                                      where policyReference.Attribute("URI").Value.StartsWith("#")
                                      let uri = policyReference.Attribute("URI").Value.Substring(1)
                                      from policy in wsdlDocument.Descendants(policyElementName)
                                      where policy.Attribute(idAttributeName).Value == uri            
                                      select policy.ToString();
    
                #region Removing Embedded Namespaces
                string temp = operationPolicy.FirstOrDefault();
                if (temp.Contains(Constants.WSPolicyNsURI.XMLNS_SP) || temp.Contains(Constants.WSPolicyNsURI.XMLNS_WSP) || temp.Contains(Constants.WSPolicyNsURI.XMLNS_WSU))
                {
                    temp = temp.Replace(Constants.WSPolicyNsURI.XMLNS_SP, String.Empty);
                    temp = temp.Replace(Constants.WSPolicyNsURI.XMLNS_WSP, String.Empty);
                    temp = temp.Replace(Constants.WSPolicyNsURI.XMLNS_WSU, String.Empty);
                }
    
                #endregion
                return temp;
            }
    

    【讨论】:

      猜你喜欢
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多