XSLT 변환을 기반으로 작은 코드 생성기를 만들려고합니다. 나는 오히려 XSLT에 익숙하지 않고, 내가 변형 된 부분에서 오류를 만들었다 고 생각한다. 나는 두 가지 변환 (main과 util)을 가지고 있으며 메타 데이터는 XML 파일에서 가져온다. (테이블 생성에 사용되는 테이블 이름에 대한 정보를 저장한다. - 테이블 이름 = 클래스 이름, 컬럼 이름 = 필드 이름). 여기 내 변환은 다음과 같습니다XSLT 변환이 아무 것도 반환하지 않습니다.
홈페이지 변환 여기
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
xmlns:dbs="http://kadgen/DatabaseStructure">
<xsl:import href="..\MySolution\UtilTemplates.xslt"/>
<xsl:output method="text" encoding="UTF-8" indent="yes"/>
<xsl:param name="Name"/>
<xsl:param name ="filedName"/>
<xsl:template match="/">
<xsl:apply-templates select=
"//dbs:DataStructure//dbs:Table[@Name='Customer']"
mode="BuildClasses" />
</xsl:template>
<xsl:template match="dbs:Table" mode="BuildClasses">
<xsl:call-template name="Header"/>
Public Class <xsl:value-of select="@Name"/>
{
<xsl:call-template name="ClassConstructors"/>
<xsl:call-template name="ClassLevelDeclarations"/>
<xsl:call-template name="FieldAccessProperties"/>
}
</xsl:template>
<xsl:template name="ClassConstructors">
</xsl:template>
<xsl:template name="ClassLevelDeclarations">
</xsl:template>
<xsl:template name="FieldAccessProperties">
</xsl:template>
</xsl:stylesheet>
된 UTIL 변환 :
여기<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="text"/>
<xsl:template name="Header">
using System;
using System.Collections.Generic;
using System.Xml;
using System.Linq;
using System.Text;
</xsl:template>
</xsl:stylesheet>
내 XML 파일의 일부는 다음과 같습니다
다음<?xml version="1.0" encoding="utf-8" ?>
<dbs:MetaDataRoot FreeForm="true" xmlns:dbs="http://kadgen/DatabaseStructure">
<dbs:DataStructures>
<dbs:DataStructure Name="ASPDatabase">
<dbs:Tables>
<dbs:Table Name="Customer" OriginalName="Customer">
<dbs:TableColumns>
<dbs:TableColumn Name="CustomerID" NETType="int" IsPrimaryKey="true" />
<dbs:TableColumn Name="Name" NETType="string" IsPrimaryKey="false"/>
</dbs:TableColumns>
<dbs:TableConstraints>
<dbs:PrimaryKey>
<dbs:PKField Name="CustomerID"/>
</dbs:PrimaryKey>
</dbs:TableConstraints>
</dbs:Table>
</dbs:Tables>
</dbs:DataStructure>
</dbs:DataStructures>
</dbs:MetaDataRoot>
나는 방법이다 변형 시작 :
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load("xslt transformation location");
myXslTrans.Transform("XML source location", "Empty class file location");
위의 코드를 실행 한 후에는 내가 얻은 것만 비어있는 CS 파일입니다. 그것은 강력 해 보이지만 제발, 그것을 통해 가서 도와주세요.
감사합니다.
그럼 xsl의 'xmlns : dbs'와 데이터 파일의 정의가 다릅니다. 그렇습니까? – GSerg
입력 오류입니다. 죄송합니다. –
XML 마크 업의 형식이 올바르지 않습니다. ''요소의 끝 태그가 없습니다. 어쩌면 그게 문제 야? –