2017-11-16 1 views
0

xslt를 통해 변환해야하는 다음 xmldata 입력이 있습니다. 간단히 ns : something 콘텐츠를 추출하고 싶습니다. dynamicNS 네임 스페이스는 런타임 중에 다를 수 있습니다.XLST가 네임 스페이스 접두어를 무시하지 않음

<?xml version="1.0"?> 
    <ns:something> 
    <ns:myid>1</ns:myid> 
    <ns:myvalue>2</ns:myvalue> 
    </ns:something> 

나는 그것을 시도 :

<?xml version="1.0"?> 
<dynamicNS:header> 
    <ns:something> 
    <ns:myid>1</ns:myid> 
    <ns:myvalue>2</ns:myvalue> 
    </ns:something> 
</dynamicNS:header> 

출력해야

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="*"> 
     <ns:something> 
      <xsl:copy-of select="node()"/> 
     </ns:something> 
    </xsl:template> 

</xsl:stylesheet> 

그러나 이것은 나에게 오류 제공 : 접두사 요소에 대한 "dynamicNS"을 " dynamicNS : header "는 바인딩되지 않습니다.;

각 실행마다 다를 수 있기 때문에 dynamicNS에 대한 네임 스페이스를 추가하지는 않습니다.

원하는 출력을 얻는 올바른 방법은 무엇입니까?

감사합니다.

+0

오류 메시지는 XML 구문 분석기에서 가져온 것으로 입력시 'dynamicNS' 접두사에 대한 네임 스페이스 선언이 없음을 알립니다. 그렇게하면 입력이 네임 스페이스 잘 구성된 XML이 아니며 네임 스페이스 정형 XML이 필요하므로 XSLT/XPath에 대한 입력으로 사용할 수 없습니다. –

+0

Martin 감사합니다. 당신의 설명이 의미가 있습니다. 이제 네임 스페이스 선언 매뉴얼을 데이터 객체에서 생성 된 xmldata에 추가합니다. 지금 작동하지만 여전히 내 xslt 구현이 올바른 선택인지 확실하지 않습니다. 적어도 지금 결과는 괜찮습니다. 첫 번째 게시물에서 언급 한 xslt를 사용하는 것이 가장 좋은 방법입니까? – Sharmane

+0

게시 된 스타일 시트 코드가 네임 스페이스 선언없이 리터럴 결과 요소 인'ns : something'을 사용하는 방식으로 작동하는 것을 보지 못합니다. XSLT가 네임 스페이스가 잘 구성되어 있지 않으므로 XSLT 프로세서가 어떻게 표시되는지 알 수 없습니다. 전혀 처리하지 마십시오. –

답변

0

루트 요소와 네임 스페이스 선언 (들)을 생략하고 오직 자식 요소는 XSLT 2에 복사해서 나중에 사용할 수있는하려면

루트의 모든 하위 요소 (예 : 입력)의 복사본을 만들려면

내가 코멘트에 이미 말했듯이

는 결과

<ns:something xmlns:ns="http://example.com/ns"> 
    <ns:myid>1</ns:myid> 
    <ns:myvalue>2</ns:myvalue> 
    </ns:something> 

http://xsltransform.hikmatu.com/gWcDMee

로 변환되고, 두 스타일 시트 코드 네임 스페이스 잘 구성된 XML 문서 일 필요로 입력뿐만 아니라 XSLT하기 네임 스페이스 선언이없는 접두사가있는 질문에 게시 한 입력 및 출력은 XSLT 처리를 허용하지 않습니다.

관련 문제