2015-03-09 5 views
0

У меня возникает задача извлечь часть XML-файла из моего исходного XML-файла. Я новичок в XSLT, но я попытался написать XSLT, но не получаю удачи в получении правильных данных.Извлечение части XML из другого файла XML с использованием XSLT

Например, я имею XML как

> <?xml version="1.0" encoding="utf-8"?> 
<Response xmlns="https://insuredapp.com/rating/" id="24d846677aefd1bd7fdf52286e692a22"> 
    <Result type="request"> 
     <abc> 
      <bcd> 

      </bcd> 
     </abc> 
    </Result> 
    <Result type="response"> 
     <InsuranceSvcRs> 
      <PersPkgPolicyQuoteInqRs> 
       <PersPolicy> 
        <Coverage> 
         <!--- Some MOre Elemetns --> 
        </Coverage> 
        <Coverage> 
         <!--- Some MOre Elemetns --> 
        </Coverage> 
        <Coverage> 
         <!--- Some MOre Elemetns --> 
        </Coverage> 
       </PersPolicy> 
      </PersPkgPolicyQuoteInqRs> 
     </InsuranceSvcRs> 
    </Result> 
</Response> 

После применения XSLT преобразование Я хочу выход быть

> <?xml version="1.0" encoding="utf-8"?> 
<Coverages> 
    <Coverage> 
     <!--- Some More Elements --> 
    </Coverage> 
    <Coverage> 
     <!--- Some More Elements --> 
    </Coverage> 
    <Coverage> 
     <!--- Some More Elements --> 
    </Coverage> 
</Coverages> 

Для извлечения выше покрытий с использованием XSLT я написал следующий код XSLT

> <?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/Response/Result[@type='response']/InsuranceSvcRs/PersPkgPolicyQuoteInqRs/PersPolicy"> 
     <!--<xsl:for-each select="/Response/Result[@type='response']/InsuranceSvcRs/PersPkgPolicyQuoteInqRs/PersPolicy/Coverage"> 
      <xsl:value-of select="CoverageCd"/> 
     </xsl:for-each>--> 

     <xsl:copy> 
      <xsl:apply-templates select="/Response/Result[@type='response']/InsuranceSvcRs/PersPkgPolicyQuoteInqRs/PersPolicy"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

Но я не получаю желаемого результата, любезно смотрю на него.

ответ

0

Прежде всего, это пространство имен по умолчанию во входной документ:

<Response xmlns="https://insuredapp.com/rating/"> 

Если вы хотите, чтобы выбрать отдельные элементы этого входа, вы должны переобъявить это пространство имен в таблицы стилей XSLT:

<xsl:stylesheet xmlns:resp="https://insuredapp.com/rating/"> 

Начать с шаблоном, который соответствует / (узел, документ), выход Coverages и использовать xsl:copy-of инструкция.

таблицы стилей XSLT

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:resp="https://insuredapp.com/rating/" 
    exclude-result-prefixes="resp"> 

    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
     <Coverages xmlns="https://insuredapp.com/rating/"> 
      <xsl:copy-of select="//resp:Coverage"/> 
     </Coverages> 
    </xsl:template> 

</xsl:stylesheet> 

XML-выход

<?xml version="1.0" encoding="UTF-8"?> 
<Coverages xmlns="https://insuredapp.com/rating/"> 
    <Coverage> 
     <!--- Some MOre Elemetns --> 
    </Coverage> 
    <Coverage> 
     <!--- Some MOre Elemetns --> 
    </Coverage> 
    <Coverage> 
     <!--- Some MOre Elemetns --> 
    </Coverage> 
</Coverages> 

Обратите внимание, что элементы в выходе все еще находятся в пространстве имен. Неясно, хотите ли вы избавиться от этого пространства имен.

+0

Большое спасибо за ваш ответ. – Faiz

+0

@Faiz Если этот ответ был полезен для вас, то, пожалуйста, примите его. Благодаря! Вот как работает ответ: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work. –

Смежные вопросы