2009-06-04 7 views
11

필자는 가지고있는 XML 문서를 CSV 파일로 변환 할 XSLT를 작성하려고합니다. 내가 원하는 것은 출력과 같이 것 XSLT이다XML을 CSV로 변환하기위한 XSLT를 작성하려면 어떻게해야합니까?

<?xml version="1.0" encoding="utf-8"?> 
<Import> 
    <Users> 
     <User ID="user_1" EmailAddress="[email protected]"> 
      <Contact FirstName="John" LastName="Doe" /> 
      <Address Street1="808 Elm St" City="Anywhere" State="NY" /> 
     </User> 

     <User ID="user_2" EmailAddress="[email protected]"> 
      <Contact FirstName="Jane" LastName="Noone" /> 
      <Address Street1="123 Some Rd" City="Anywhere" State="NY" /> 
     </User>  
    </Users> 
</Import> 

: 다음은 XML의 샘플입니다

John,Doe,808 Elm St,Anywhere,NY 
Jane,Noone,123 Some Rd,Anywhere,NY 

내가 변환을 시작하는 올바른 C# 코드가 있다고 생각은하지만, 단지의 경우 내가하지 않습니다 여기에 코드뿐만 아니라입니다 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Xsl; 
using System.Configuration; 

namespace UserTransform 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string oldXML = ConfigurationSettings.AppSettings["XMLToBeTransformed"]; 
      string xsltLocation = ConfigurationSettings.AppSettings["XSLTfile"]; 
      string newCSV = ConfigurationSettings.AppSettings["NewCSVLocation"]; 

      XslCompiledTransform transform = new XslCompiledTransform(); 
      transform.Load(xsltLocation); 
      transform.Transform(oldXML, newCSV); 
     } 
    } 
} 

답변

17

모든 사용자와 일치하는 템플릿을 작성, 다음 순서로 필요한 정보를 꺼내 당신이 원하는 :

,
<xsl:template match="//User"> 
    <xsl:value-of select="Contact/@FirstName"/>, 
    <xsl:value-of select="Contact/@LastName"/>, 
    <!--etc--> 
</xsl:template> 

분명히 올바른 위치에 줄 바꿈을 사용하여 원하는대로 공백을 처리해야합니다. 나는 이것을 독자에게 연습으로 남겨 둘 것이다.

+0

감사합니다. 적어도 필자가 샘플 XML 파일에서 원하는 값을 검색하는 것입니다 (서식이 완전히 미쳤지 만). 웬일인지 다음 XSLT를 사용하여 줄 바꿈과 별난 공간이 생깁니다. , ,

-3

내 경험에서 나는 항상 당신이 항상 브라우저 프로세스에게로 서버를 완화 XML을 수 있도록하는 것을 선호 C#

+3

글쎄, 그 xslt는 exe에서 사용되지만 ... 일반적으로 서버에서 xslt를 사용하는 것이 더 안전합니다 * xslt를 쓰려고하면 매우 고통 스럽습니다. 모든 브라우저 변형의 xslt 프로세서를 다룹니다. –

+0

아마도 도움이되지 않을 수도 있습니다 ... XML 데이터를 변환하기 위해 Java에서 XSLT 서버 측을 확실히 사용했습니다. 빠르고 효율적인 표준. 고객이 자바 스크립트를 사용할 수없는 경우 어떻게해야합니까? – Brabster

+0

아마도 XSLT의 의미에 혼란 스러울 것입니다. 모든 XML 변형의 우산입니까? 예를 들어 PHP의 SimpleXML 라이브러리를 사용하여 일부 XML을 파싱하고 HTML, CSV 또는 그 밖의 XSLT로 파기한다면? XSLT는 자신의 마크 업/언어라고 생각했습니다. –

7

으로 시도하는 것 같다 무엇을하는 일없는 서버 측의 클라이언트 측에서 XSLT를 사용했습니다 더 까다로운 일을 계속 수행하십시오. 즉, 여기에 XML을 번역하고 위와 같이 CSV 형식으로 제시해야하는 샘플 XSLT가 있습니다.

이 샘플 코드가 도움이되기를 바랍니다. 그렇지 않은 경우 알려주십시오.

<xsl:stylesheet version="1.0"> 
    <xsl:template match="/"> 
     <table> 
      <xsl:for-each select="//User"> 
       <tr> 
        <td> 
         <xsl:value-of select="conat('[', @ID, ']')"/> 
         <xsl:value-of select="','"/> 
         <xsl:value-of select="Contact/@FirstName"/> 
         <xsl:value-of select="','"/> 
         <xsl:value-of select="Contact/@LastName"/> 
         <xsl:value-of select="','"/> 
         <xsl:value-of select="Address/@Street1"/> 
         <xsl:value-of select="','"/> 
         <xsl:value-of select="Address/@City"/> 
         <xsl:value-of select="','"/> 
         <xsl:value-of select="Address/@State"/> 
        </td> 
       </tr> 
      </xsl:for-each> 
     </table> 
    </xsl:template> 
</xsl:stylesheet> 
+0

죄송합니다.하지만 코드가 세 줄의 줄 바꿈을하기 때문에 작동하지 않습니다. 콤마로는 을 사용하십시오. – alamar

+1

의견을 보내 주셔서 감사합니다. alamar. 내 블로그에 전체 솔루션을 올렸습니다. 아직 줄 바꿈이 있는지 살펴보고 알려주십시오. 출력에 대해 알고 싶은 몇 가지 사항을 설명했습니다. 여기에 게시물이 있습니다 : http : //www.jroller.com/evans/entry/using_xslt_to_transform_xml –

+0

','및 '['를 자신의 xsl : value-of 요소에 넣는 것이 더 좋았을 것입니다. 그러면 원하는대로 서식을 지정하고 줄 바꿈을 추가하지 않아도됩니다. 실제로 ... 그 형식으로 편집하겠습니다. – jsight

관련 문제