2015-06-03 2 views
0

Мне нужно удалить псевдонимы пространства имен из xml. Этот xml получает от бэкэнд-сервиса (разные ответы могут иметь разные структуры), и в конечном итоге его необходимо преобразовать в формат Json. Следовательно, я ищу универсальный XSLT для удаления псевдонимов пространства имен из xml, прежде чем преобразовать его в Jsonx, а затем Json.удаление псевдонимов пространства имен из xml

XML я в настоящее время:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <ns4:policySnapshotResponse xmlns="http://www.aig.com/ACORD1/xml/" xmlns:ns4="http://www.aig.com/gct/services/PolicyInquiryServiceV1.0" xmlns:ns2="http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/" xmlns:ns3="http://www.aig.com/gct/services/commonHeaderV1.0"> 
     <ns4:requestHeader> 
      <ns3:id>Spoofy</ns3:id> 
      <ns3:requestApplicationID/> 
      <ns3:requestMessageID/> 
      <ns3:echoBack>false</ns3:echoBack> 
     </ns4:requestHeader> 
     <ns4:applicationContext> 
      <ns3:businessSegment>CL</ns3:businessSegment> 
      <ns3:region>ALL</ns3:region> 
      <ns3:knowledgeDate>2015-05-24</ns3:knowledgeDate> 
      <ns3:country>IE</ns3:country> 
      <ns3:language>en</ns3:language> 
      <ns3:lineOfBusiness>aig:CAUSC</ns3:lineOfBusiness> 
      <ns3:subLineOfBusiness>AUTOP</ns3:subLineOfBusiness> 
      <ns3:systemDate>2015-06-03</ns3:systemDate> 
      <ns3:targetSystemName>GOALD</ns3:targetSystemName> 
     </ns4:applicationContext> 
     <ns4:PolicyInqRs> 
      <ns2:PolInfo> 
       <ns2:CommlPropertyPolicy> 
        <ns2:CommlPolicy/> 
       </ns2:CommlPropertyPolicy> 
      </ns2:PolInfo> 
     </ns4:PolicyInqRs> 
     </ns4:policySnapshotResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

Xml мне нужно без мыла namespacesand конверт:

<policySnapshotResponse> 
     <requestHeader> 
      <id>Spoofy</id> 
      <requestApplicationID/> 
      <requestMessageID/> 
      <echoBack>false</echoBack> 
     </requestHeader> 
     <applicationContext> 
      <businessSegment>CL</businessSegment> 
      <region>ALL</region> 
      <knowledgeDate>2015-05-24</knowledgeDate> 
      <country>IE</country> 
      <language>en</language> 
      <lineOfBusiness>aig:CAUSC</lineOfBusiness> 
      <subLineOfBusiness>AUTOP</subLineOfBusiness> 
      <systemDate>2015-06-03</systemDate> 
      <targetSystemName>GOALD</targetSystemName> 
     </applicationContext> 
     <PolicyInqRs> 
      <PolInfo> 
      <CommlPropertyPolicy> 
       <CommlPolicy/> 
      </CommlPropertyPolicy> 
      </PolInfo> 
     </PolicyInqRs> 
    </policySnapshotResponse> 

Я уверен, преобразование XML тыс дальше jsonx, а затем в формате JSON.

ответ

0

Попробуйте эту

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 
using System.Text.RegularExpressions; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string input = 
       "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" + 
        "<soapenv:Body>" + 
         "<ns4:policySnapshotResponse xmlns=\"http://www.aig.com/ACORD1/xml/\" xmlns:ns4=\"http://www.aig.com/gct/services/PolicyInquiryServiceV1.0\" xmlns:ns2=\"http://www.ACORD.org/standards/PC_Surety/ACORD1/xml/\" xmlns:ns3=\"http://www.aig.com/gct/services/commonHeaderV1.0\">" + 
         "<ns4:requestHeader>" + 
          "<ns3:id>Spoofy</ns3:id>" + 
          "<ns3:requestApplicationID/>" + 
          "<ns3:requestMessageID/>" + 
          "<ns3:echoBack>false</ns3:echoBack>" + 
         "</ns4:requestHeader>" + 
         "<ns4:applicationContext>" + 
          "<ns3:businessSegment>CL</ns3:businessSegment>" + 
          "<ns3:region>ALL</ns3:region>" + 
          "<ns3:knowledgeDate>2015-05-24</ns3:knowledgeDate>" + 
          "<ns3:country>IE</ns3:country>" + 
          "<ns3:language>en</ns3:language>" + 
          "<ns3:lineOfBusiness>aig:CAUSC</ns3:lineOfBusiness>" + 
          "<ns3:subLineOfBusiness>AUTOP</ns3:subLineOfBusiness>" + 
          "<ns3:systemDate>2015-06-03</ns3:systemDate>" + 
          "<ns3:targetSystemName>GOALD</ns3:targetSystemName>" + 
         "</ns4:applicationContext>" + 
         "<ns4:PolicyInqRs>" + 
          "<ns2:PolInfo>" + 
           "<ns2:CommlPropertyPolicy>" + 
            "<ns2:CommlPolicy/>" + 
           "</ns2:CommlPropertyPolicy>" + 
          "</ns2:PolInfo>" + 
         "</ns4:PolicyInqRs>" + 
         "</ns4:policySnapshotResponse>" + 
        "</soapenv:Body>" + 
       "</soapenv:Envelope>"; 

      string pattern = "(</?)([^:]*:)"; 
      Regex expr = new Regex(pattern); 
      input = expr.Replace(input, "$1"); 

      XDocument doc = XDocument.Parse(input); 
      XElement element = doc.Descendants().Where(x => x.Name.LocalName == "policySnapshotResponse").FirstOrDefault(); 
      foreach (XAttribute attribute in element.Attributes().ToList()) 
      { 
       attribute.Remove(); 
      } 
      doc = XDocument.Parse(element.ToString()); 

     } 
    } 
} 
​ 
0

@jdwend

Привет спасибо за ответ. я получил желаемый результат, используя следующий метод:

ниже шаблон, который я использую для преобразования xml в jsonx, я изменил имя на локальное имя в соответствующих местах и ​​получил желаемый результат.

<xsl:output method="xml" indent="yes" encoding="UTF-8" omit-xml-declaration="yes"/> 
    <xsl:strip-space elements="*"/> 
    <!--Array--> 
    <xsl:template match="*[*[2]][local-name(*[1])=local-name(*[2])]"> 
     <json:object name="{local-name()}"> 
     <json:array name="{local-name(*[1])}"> 
      <xsl:apply-templates/> 
     </json:array> 
     </json:object> 
    </xsl:template> 
    <!--Array member--> 
    <xsl:template match="*[parent::*[ local-name(*[1])=local-name(*[2]) ]] | /"> 
     <json:object> 
     <xsl:apply-templates/> 
     </json:object> 
    </xsl:template> 
    <!--Object--> 
    <xsl:template match="*"> 
     <json:object name="{local-name()}"> 
     <xsl:apply-templates/> 
     </json:object> 
    </xsl:template> 
    <!--String--> 
    <xsl:template match="*[not(*)]"> 
     <json:string name="{local-name()}"> 
     <xsl:value-of select="."/> 
     </json:string> 
    </xsl:template> 
</xsl:stylesheet> 
Смежные вопросы