2013-06-04 2 views
0

xslt를 사용하여 주어진 xml에서 출력 XML을 가져 오려고합니다. 출력 xml에는 주어진 xml에 추가 할 요소가 몇 개 있습니다. 그러나 필요한 출력을 얻지 못하고 있습니다. XSLT를 사용하여 XML에서 수정

<Response xmlns="http://xyz.abc/max/" xmlns:ns1="http://xyz.abc/max/"> 
    <out xmlns=""> 
     <Number xmlns="http://xyz.abc/max/">Desc1</Number> 
     <Address xmlns="http://xyz.abc/max">Desc2</Address> 
     <Records xmlns="http://xyz.abc/max">Desc3</Records> 
    </out> 
</Response> 

내가 출력 XML을 원하는 같은 : 나는 XSLT 사용하고

<?xml version="1.0" encoding="UTF-8"?> 
<abc:Reqeust xmlns:abc="http://www.nnn.com/bnm" 
xmlns:ns1="http://xyz.abc/max/" xmlns="http://xyz.abc/max/" > 
    <abc:Tray> 
     <abc:Remote> 
      <abc:ID>ID1</abc:ID> 
      <abc:Distance>Always</abc:Distance> 
     </abc:Remote> 
     <abc:Time> 
      1100-01-01T01:01:01+05:30 
     </abc:Time> 
     <abc:AreaMap /> 
    </abc:Tray> 
    <abc:Area> 
     <abc:Get> 
      <abc:Fault>Token1</abc:Fault> 
     </abc:Get> 
     <Response xmlns="http://xyz.abc/max/" xmlns:ns1="http://xyz.abc/max/"> 
      <out xmlns=""> 
       <Number xmlns="http://xyz.abc/max/">Desc1</Number> 
       <Address xmlns="http://xyz.abc/max">Desc2</Address> 
       <Records xmlns="http://xyz.abc/max">Desc3</Records> 
      </out> 
     </Response> 
    </abc:Area> 
</abc:Reqeust> 

:

내가 좋아하는 입력 XML이

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:abc="http://www.nnn.com/bnm" 
xmlns:ns1="http://xyz.abc/max/" xmlns="http://xyz.abc/max/" > 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="Response"> 
     <abc:Request> 
      <abc:Tray> 
       <abc:Remote> 
        <abc:ID>ID1</abc:ID> 
        <abc:Distance>Always</abc:Distance> 
       </abc:Remote> 
       <abc:Time> 
        1100-01-01T01:01:01+05:30 
       </abc:Time> 
       <abc:AreaMap /> 
      </abc:Tray> 
      <abc:Area> 
       <abc:Get> 
        <abc:Fault>Token1</abc:Fault> 
       </abc:Get> 
       <Response> 
        <xsl:apply-templates select="@*|node()"/> 
       </Response> 
      </abc:Area> 
     </abc:Request> 
    </xsl:template> 
</xsl:stylesheet> 

을하지만 난 점점 아니에요 필요한 출력. 필요한 출력 xml을 얻기 위해 xslt에서 어떤 변경을해야합니까?

답변

0

xslt-1.0에서는 항상 네임 스페이스 접두사을 사용하여 네임 스페이스에 속한 이름에 액세스해야합니다.
응답 입력 XML의 요소는 기본 네임 스페이스 xmlns="http://xyz.abc/max/"에 속합니다.
이미이 네임 스페이스를 xmlns:ns1="http://xyz.abc/max/으로 추가했습니다.

따라서 응답 양식 템플릿을 변경

<xsl:template match="Response"> 

에 :

<?xml version="1.0"?> 
<abc:Request xmlns:abc="http://www.nnn.com/bnm" xmlns:ns1="http://xyz.abc/max/" xmlns="http://xyz.abc/max/"> 
    <abc:Tray> 
     <abc:Remote> 
      <abc:ID>ID1</abc:ID> 
      <abc:Distance>Always</abc:Distance> 
     </abc:Remote> 
     <abc:Time> 
      1100-01-01T01:01:01+05:30 
     </abc:Time> 
     <abc:AreaMap/> 
    </abc:Tray> 
    <abc:Area> 
     <abc:Get> 
      <abc:Fault>Token1</abc:Fault> 
     </abc:Get> 
     <Response> 
      <out xmlns=""> 
       <Number xmlns="http://xyz.abc/max/">Desc1</Number> 
       <Address xmlns="http://xyz.abc/max">Desc2</Address> 
       <Records xmlns="http://xyz.abc/max">Desc3</Records> 
      </out> 
     </Response> 
    </abc:Area> 
</abc:Request> 
: 다음과 같은 출력을 생성합니다
<xsl:template match="ns1:Response"> 

관련 문제