2017-09-09 12 views
0

전 xslt가 새로 생겼습니다. docbook5를 fb2/fb3으로 변환하기위한 간단한 XSLT와 다른 포맷이 필요합니다. 하지만 이해할 수없는 문제를 발견했습니다. <book> 태그에 xmlns="http://docbook.org/ns/docbook" xslt가 작동하지 않으면 이해할 수 없습니다. DocBook으로 (db.docbook)의 최소 예 :XSLT가 docbook xmlns와 함께 작동하지 않았습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<book xml:id="simple_book" version="5.0" 
    xml:lang="ru" 
    xmlns="http://docbook.org/ns/docbook" 
    xmlns:xlink="http://www.w3.org/1999/xlink" 
> 
    <info> 
    <title>An Example Book</title> 
    </info> 
</book> 

및 XSLT (XSL/example.xsl) :

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

<xsl:template match="/"> 
    <tag><xsl:value-of select="/book/info/title"/></tag> 
</xsl:template> 

</xsl:stylesheet> 

내가 시도 xsltproc

xsltproc xsl/example.xsl db.docbook 

과 색슨

saxon-xslt db.docbook xsl/example.xsl 

in Debian GNU/L inux 9.1,하지만 난의 DocBook에서의 xmlns를 제거하는 경우

<?xml version="1.0"?> 
<tag/> 

을 가지고 :

<?xml version="1.0"?> 
<tag>An Example Book</tag> 

누군가가 xlmns를 제거하지 않고 XSLT를 만드는 방법을 알 수있다 :

<?xml version="1.0" encoding="UTF-8"?> 
<book xml:id="simple_book" version="5.0" 
    xml:lang="ru" 
    xmlns:xlink="http://www.w3.org/1999/xlink" 
> 
    <info> 
    <title>An Example Book</title> 
    </info> 
</book> 

두 프로세서가 바로 출력 할?

+0

이 @JLRishe 예는 같은 문제처럼,하지만 난 그 질문이 해결 말할 수 없습니다. –

답변

0

당신은 당신의 XSLT에 네임 스페이스를 선언하고 사용해야합니다 :

<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:db="http://docbook.org/ns/docbook"> 

    <xsl:template match="/"> 
    <tag><xsl:value-of select="/db:book/db:info/db:title"/></tag> 
    </xsl:template> 

</xsl:stylesheet> 
+0

감사합니다. 작동하지만 xmlns를 출력에 추가하십시오. ' 예제 도서' 은 내가 필요한 부분이 아님을 이해 했으므로 –

+0

@AlexeyShrub 다른 질문에서와 같이'exclude-result-prefixes'를 사용하십시오. –

+0

@ michael.hor257k 감사합니다! –