2016-06-30 6 views
1

저는 xslt/xsd-programming의 초보자이므로 XMLSpy를 사용하여 xml2xml 변환을 만듭니다. 두 xml 모두 xsd가 있습니다. 아쉽게도 다음 코드는 유효하지 않습니다.xslt는 xsl : for-each 대신 element를 기대합니다.

<xsl:template match="/"> 
    <table xsi:noNamespaceSchemaLocation="table.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <xsl:for-each select="table/body/line"> 
      <row> 
      </row> 
     </xsl:for-each> 
    </table> 
</xsl:template> 

오류 메시지는 테이블 다음에 행 요소가 필요하다고 표시합니다.
세부 사항 (번역) : 요소 <xsl:for-each>은 요소 <table>의 유형 {익명}을 기대하지 않았습니다.

xsd에 대한 참조를 제거하거나 for-each 문을 제거하면 문제를 해결할 수 있습니다.
그러나 무엇이 잘못되었는지 알 수 없습니다. 제 이해를 위해 for-each-loop는 첫 xml의 각 줄에 <row> 태그를 반복해야합니다.
다음은 대상의 xsd의 일부입니다.

<xs:element name="table"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="row" maxOccurs="unbounded"/> 
      <xs:element ref="Metadata" minOccurs="0"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
+0

글쎄, 스키마는 XSLT 변환의 결과가 XSLT의 모습을 어떻게하지,보고하도록되어 방법을 정의합니다. XSLT 코드는 일반적으로 XSLT 명령어와 결과 요소가 섞여 있으며 분명히 결과에 대한 스키마를 따르지 않습니다. 그래서 XSLT를 작성할 때 단순히 메시지를 무시합니다. 아니면 XMLSpy에서 XSLT 변환을 실행하지 못하게하는 오류가 발생합니까? –

+0

사실, XSL 변환을 시도하지 않았지만 작동합니다. 나는 지금 그 메시지를 무시할 것으로 생각한다. 감사. –

답변

1

내가 Altova는 "table.xsd의 스키마에 대해이 요소의 유효성을 검사"를 의미하는 신호로 속성 xsi:noNamespaceSchemaLocation="table.xsd"의 존재를 사용하고 있는지 의심; 물론 필요한 요소를 포함하는 대신 필요한 요소를 만드는 XSLT 지침이 포함되어 있으므로 해당 스키마에 대해 유효하지 않으므로 원하는 스키마가 아닙니다. 속성 :

는 XSL을 사용하여 속성을 생성하려고,이 문제를 해결하려면

<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <xsl:attribute name="xsi:noNamespaceSchemaLocation">table.xsd</xsl:attribute> 
    <xsl:for-each select="table/body/line"> 
      <row/> 
    </xsl:for-each> 
</table> 
+0

코드를 사용할 때 메시지가 더 이상 나타나지 않을 가능성이 있습니다. (내가 사용했던 동일한 방법을 사용하는 Altova의 예제가 있기 때문에 조금 놀랍습니다.) 고맙습니다. –