2017-11-27 1 views
1

저는 XSL 변환을 고수하고 하루 종일 많은 것을 시도했습니다. 분명히 나는 ​​이것에 대한 전문가가 아니다.XSLT 문제 : 아니요 출력에 태그가 없습니다.

내 XSL 파일의 문제점을 이해하도록 도와 줄 수 있습니까?

이것은 내 원본 XML입니다.

<?xml version="1.0" encoding="UTF-8"?> 
<PublishPFTEST xmlns="http://www.ibm.com/maximo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creationDateTime="2017-08-18T17:20:13-03:00" transLanguage="EN" baseLanguage="EN" messageID="7584270.1503087614245122357" maximoVersion="7 6 20161014-1020 V7606-50" event="1"> 
    <PFTESTSet> 
    <WORKORDER action="Add"> 
     <ASSETNUM>MPC1234</ASSETNUM> 
     <DESCRIPTION>WOTEST</DESCRIPTION> 
     <WONUM>WO123</WONUM> 
     <SITEID>BEDFORD</SITEID> 

    </WORKORDER> 
    </PFTESTSet> 
</PublishPFTEST> 

내 XSL 파일 :

<?xml version="1.0" encoding="UTF-8" ?> 

<xsl:stylesheet version="1.0" xmlns="http://www.ibm.com/maximo" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="/"> 
     <TemplateSet> 
      <xsl:for-each select="/PublishPFTEST/PFTESTSet/WORKORDER"> 
       <asset> 
        <xsl:value-of select="ASSETNUM"/> 
       </asset> 
       <desc> 
        <xsl:value-of select="DESCRIPTION"/> 
       </desc> 

      </xsl:for-each> 
      <xsl:apply-templates/> 
     </TemplateSet> 
    </xsl:template> 
</xsl:stylesheet> 

그리고이 변환 된 XML 파일 ... 그것은 다른 데이터없이 XML 태그를 보여줍니다.

<?xml version="1.0" encoding="utf-8"?> 
<TemplateSet xmlns="http://www.ibm.com/maximo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 


     MPC1234 
     WOTEST 
     WO123 
     BEDFORD 



</TemplateSet> 

가짜 질문은 죄송합니다.

+0

검색이 질문에 1000 개 답변 "XSLT의 기본 네임 스페이스"에 대한 ... (I는 또한 네임 스페이스가 출력되지 않을 것 exclude-result-prefixes="m" 추가). 또는 여하튼, 기본 네임 스페이스가 문제라는 것을 알고 있었는지 질문했을 것입니다. –

+0

@MichaelKay, 내가 말했듯이 나는 하루 종일 너무 많은 것을 시도해 보았다 - 나는 그것을 일하게 만들 수 없었다. 그래서 내 마지막 수단 이었어. 감사합니다. 멋진 하루 보내십시오. –

+0

예, 어렵습니다. 누군가가 매일이 코끼리 함정에 빠지며, 문제를 해결하기위한 접근 방식에서 그들이 잘못한 것을 그들에게 말해주기가 어렵습니다. 대부분의 사람들에게 배우는 교훈은 코딩을 시작하기 전에 하루 또는 이틀간 새로운 기술에 대한 책을 읽는 것입니다. –

답변

1

XSLT's built-in template rules 때문에 모든 텍스트가 출력에 표시됩니다. 이 문제를 해결하려면 <xsl:apply-templates/>을 제거해야하므로 다른 처리는 수행되지 않습니다.

xsl:for-each이 아무 것도 선택하지 않기 때문에 새로운 XML 요소가 출력되지 않습니다. XML이 기본 네임 스페이스 http://www.ibm.com/maximo을 사용하고 있기 때문입니다. 네임 스페이스를 접두사에 바인딩하고 XPath에서 사용할 수 있습니다. 두 제안

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:m="http://www.ibm.com/maximo" 
    exclude-result-prefixes="m"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
    <TemplateSet> 
     <xsl:for-each select="/m:PublishPFTEST/m:PFTESTSet/m:WORKORDER"> 
     <asset> 
      <xsl:value-of select="m:ASSETNUM"/> 
     </asset> 
     <desc> 
      <xsl:value-of select="m:DESCRIPTION"/> 
     </desc> 
     </xsl:for-each> 
    </TemplateSet> 
    </xsl:template> 

</xsl:stylesheet> 
+0

안녕 다니엘, 정말 고마워요 ... 당신의 제안은 실제로 그것을 만들었습니다! 나는 무엇이 잘못되었는지를 이해하고 그로부터 배울 수있는 해결책을주의 깊게 검토 할 것입니다. 다시 한 번 감사드립니다. 감사합니다. –

+0

@ MarcioCorrêa 그리고 왜 대답을 수락하지 않습니까? 사람들이 대답하고 도와 줄 때까지의 시간을 존중하십시오. –

+0

Dimitre, 나는 그것을 표결했지만 SO는 내가 충분히 평판이 없기 때문에 계산에 포함되지 않는다고 말한다. 방금 StackOverfow를 사용하기 시작 했으므로 용서해주십시오. 나는 여기뿐 아니라 어디에서나 얻을 수있는 모든 도움을 존중합니다. 제발 판단하지 마십시오. –