2017-10-17 2 views
1

내가 네임 스페이스 질문 다스 십센트 있습니다 실현 "템플릿 규칙은 네임 스페이스의 요소와 일치",하지만 난 색슨에서 점점 오전 :메시지

경고 SXXP0005을 : 소스 문서는 네임 스페이스 http://docbook.org/ns/docbook, B의 유타에 모든 템플릿 규칙은 더 네임 스페이스에 요소와 일치 (사용 --suppressXsltNamespaceChec의 K를 :
피할이 경고에에)

내 소스 파일의 루트 요소는 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 
    <topic xmlns:xi="http://www.w3.org/2001/XInclude" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://docbook.org/ns/docbook" 
    xml:id="103829"> 
    <info> 
     <title>My title</title> 
    </info> 
    <procedure> 
... 

그리고 내 XSL은 다음과 같습니다

경고로
<?xml version="1.0"?> 
<xsl:stylesheet version="2.0" 
    xmlns:xi="http://www.w3.org/2001/XInclude" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://docbook.org/ns/docbook"> 

<!-- Dummy template, just trying to match anything -->  
    <xsl:template match="procedure"> 
     <orderedlist> 
      SOME TEXT 
      <xsl:copy-of select="*"/> 
     </orderedlist> 
    </xsl:template> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

, 템플릿과 일치하지 않습니다. 그러나 나는 왜 그런지 알지 못한다 : 나는 소스 파일과 XSL 파일에서 같은 기본 네임 스페이스를 사용하는 것이 이런 종류의 오류를 막을 것이라고 생각했다.

또한 접두어를 선언하고 모든 요소에 적용 할 수 있다고 가정합니다. 하지만 기본 네임 스페이스의 전치사를 접두어로 사용하는 것을 피하지 않았습니까?

답변

0

패턴 및 표현식이 procedure과 같으면 해당 네임 스페이스의 요소를 일치/선택하려면 (XSLT 2 이상) xpath-default-namespace="http://docbook.org/ns/docbook"xsl:stylesheet에 사용할 수 있습니다. 그렇지 않으면 procedure은 네임 스페이스에서 해당 이름의 요소를 일치/선택합니다.

스타일 시트의 xmlns="http://docbook.org/ns/docbook"은 결과 항목 (예 : orderedlist)을 해당 네임 스페이스에 넣는 역할 만합니다.