2017-11-28 1 views
0

xslt 2.0 스타일 시트을 사용하는 동안 XHMTL 파일을 XML로 변환하는 데 문제가 있습니다. 나는 XSLT 1.0에 대한 질문에 답을 얻었지만 실제로 XSLT 2.0에서는 작동하지 않는다는 것을 알고있다!Oxygen XML 편집기에서 XSLT 2.0을 사용하여 XHTML을 XML로 변환하는 방법은 무엇입니까? XSLT 1.0 솔루션이 작동하지 않습니다.

예 XHTML 파일 :

<?xml version="1.0" encoding="iso-8859-1"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html lang="de" xml:lang="de" xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta name="something" content="content"/> 
    (...) 
    </head> 
    <body onload="..."> 
    (...) 
    </body> 
</html> 

예 스타일 시트 :

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml"> 
<xsl:template match="xhtml:html/xhtml:head">  
    <section role="example"> 
     <xsl:attribute name="id" select="concat('something', meta[@name='something']/@content)"/>  
     (...) 
     </section> 
</xsl:stylesheet> 

나는 노드를 호출 할 수 없습니다입니다. 나는 산소 XML 편집기 (이전 버전 불행히도 모든 XML 변환을 위해 잘 작동) 및 다른 프로세서 (Saxon-EE 9.4.0.6, Saxon 그는 9.4.0.6, Saxon-PE9.4.0.6.)를 시도했다. 나는이 문제를보고 XHTML to XML XSLT conversion which makes reference to XSLT 2.0 또한 별표와 일치하는 네임 스페이스를 바꾸려고했지만 편집자는이를 허용하지 않습니다. 이 작은 변화가 속임수를 썼는지

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml" exclude-result-prefixes="xhtml"> 
<xsl:template match="xhtml:html/xhtml:head">  
    <section role="example"> 
     <xsl:attribute name="id" select="concat('something', xhtml:meta[@name='something']/@content)"/> 
     (...) 
     </section> 
</xsl:stylesheet> 

:

는 @MartinHonnen의 소중한 의견 후에 나는에 XSLT를 변경했습니다. 이제 모든 종류의 메타 정보를 XHTML에서 추출 할 수 있습니다. 결과 XML에있는 이전 스타일 시트에는 id-attribute 값으로 채워진 "something_"이있었습니다. 이 수정 된 스타일과 짧은 결과의 예는 다음과 같습니다 다시

<?xml version="1.0" encoding="UTF-8"?> 
    <section role="example" id="something_content"> 
     (...) 
    </section> 

감사합니다 !!!!

+0

"노드를 호출 할 수 없습니다."는 정확히 무슨 뜻입니까? 원하는 결과와 oXygen이 제공 한 결과 또는 정확한 오류 메시지를 게시하십시오. 일반적으로 네임 스페이스로 작업한다면 일관되게 사용해야하므로'meta' 경로는'xhtml : meta'이어야합니다. –

+0

@MartinHonnen에 대한 귀하의 의견을 보내 주셔서 감사합니다. 나는 meta를 xhtml : meta로 바 꾸었습니다. 나는 다른 문제에서 match 속성 값에만 추가해야한다는 것을 이해했다. 이것은 실제로 이미 내 질문에 대답했습니다. 어떻게 든 투표 할 수 있니? XSTL에 수정 내용을 추가하고 올바른 결과 예제를 문제 설명에 추가 할 것입니다. – rena

+0

XSLT 2 이상을 사용하여 네임 스페이스의 요소를 일치시키고 선택하는 작업을 쉽게하기위한 제안과 함께 앞의 주석에 대한 제안을 답변으로 추가했습니다. 그러면 문제를 해결 된 것으로 표시 할 수 있습니다. –

답변

1

네임 스페이스로 작업하는 경우 일관되게 사용해야하므로 meta 경로는 X12ML meta 요소를 선택하려면 xhtml:meta이어야합니다.

XSLT 2 이상을 사용하면 xsl:stylesheetxpath-default-namespace="http://www.w3.org/1999/xhtml"을 사용하면 더 편리하게 사용할 수 있습니다. match="html/head"select="meta"을 사용할 필요가 없습니다.

+0

좋아요! 추가 팁을 주신 귀하의 답변에 감사드립니다! – rena