xml 파일을로드하고 "XslCompiledTransform"을 사용하여 XSLT를 적용하는 코드가 있습니다. 입력 파일이 XML이 아니 어서 코드를 변경해야하며 CSV 파일 일 수도 있습니다. CSV를 원하는 형식으로 변환하는 XSLT가 있지만 하드 코드 된 경로를 사용합니다. 내가 가진 문제는 입력 파일 이름이 바뀌므로 이름에 widecard를 사용할 수 있습니까? 둘째, 코드에서 파일에서 XSLT 객체에 문자열로 전달하여 그 결과가 맨 아래로 떨어지게 할 수 있습니까? 나는 인터넷 검색을하고 있었고 어떤 코드도 발견하지 못했습니다. 심지어 가능할까요?XSLT가 외부 CSV 파일에 어떻게 적용됩니까?
다음은 현재 사용중인 XSLT입니다. 하드 코드 된 경로 및 파일 이름이 아닙니다.
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="fn"
exclude-result-prefixes="xs fn">
<xsl:output indent="yes" encoding="US-ASCII"/>
<xsl:param name="pathToCSV" select="'file:///C:/Downloads/inputcsv.csv'"/>
<xsl:function name="fn:getTokens" as="xs:string+">
<xsl:param name="str" as="xs:string"/>
<xsl:analyze-string select="concat($str, ',')" regex='(("[^"]*")+|[^,]*),'>
<xsl:matching-substring>
<xsl:sequence select='replace(regex-group(1), "^""|""$|("")""", "$1")'/>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:function>
<xsl:template match="/" name="main">
<xsl:choose>
<xsl:when test="unparsed-text-available($pathToCSV)">
<xsl:variable name="csv" select="unparsed-text($pathToCSV)"/>
<xsl:variable name="lines" select="tokenize($csv, '
')" as="xs:string+"/>
<xsl:variable name="elemNames" select="fn:getTokens($lines[1])" as="xs:string+"/>
<root>
<xsl:for-each select="$lines[position() > 0]">
<row>
<xsl:variable name="lineItems" select="fn:getTokens(.)" as="xs:string+"/>
<xsl:for-each select="$elemNames">
<xsl:variable name="pos" select="position()"/>
<column>
<xsl:value-of select="$lineItems[$pos]"/>
</column>
</xsl:for-each>
</row>
</xsl:for-each>
</root>
</xsl:when>
<xsl:otherwise>
<xsl:text>Cannot locate : </xsl:text><xsl:value-of select="$pathToCSV"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
명령 줄이 아닌 코드에서 XSLT 1.0을 사용하여이 작업을 수행해야합니다. XslCompiledTransform 명령은 XML 소스를 가져 오려고하지만 xslt 파일에 정의 된 CSV 파일을 사용하려고합니다. 이 명령으로 가능합니까? – Retrocoder
Martin이 말했듯이, 당신의 코드는 XSLT 2.0을 사용하는 것에 완전히 의존합니다. XSLT 1.0을 고수하고 싶다면 자신 만의 확장 기능을 구현하는 방법을 찾아야 할 것입니다. 그러나 Microsoft 이외의 회사의 .NET에서 XSLT 2.0을 제대로 지원합니다. –
그래, 내가 쓰는대로 나는 색슨을 다운로드 중이다. 모든 도움에 감사드립니다. – Retrocoder