2017-10-02 8 views
-1

값을 캡처합니다. xml 파일을 읽고 태그에서 EmployeeName 및 EmailId 값을 캡처하여 출력을 XML 파일로 생성해야한다는 요구 사항이 있습니다. 첫 번째 태그는 항상 EmployeeName을 나타내며 다섯 번째 태그는 항상 EmailId를 나타냅니다. 로우/값에 존재하는 값을 캡처xml 파일을 읽고 <value> 태그에서

필요 .... 등

입력 XML 파일은 다음과

<?xml version="1.0" encoding="utf-8"?> 
<dataset xmlns="http://developer.net.com/schemas/xmldata/1/" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> 
    <!-- 
<dataset 
    xmlns="http://developer.net.com/schemas/xmldata/1/" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
    xs:schemaLocation="http://developer.net.com/schemas/xmldata/1/ xmldata.xsd" 
> 
--> 
    <metadata> 
     <item length="20" type="xs:string" name="EmployeeName"/> 
     <item length="4" type="xs:string" name="Full/Part Time Code"/> 
     <item type="xs:dateTime" name="Hire Date"/> 
     <item type="xs:dateTime" name="Termination Date"/> 
     <item length="30" type="xs:string" name="EmailID"/> 
     <item length="30" type="xs:string" name="State"/> 
     </metadata> 
     <data> 
      <row> 
      <value>JOSEPH</value> 
      <value>F</value> 
      <value>1979-04-19T00:00:00</value> 
      <value>2007-08-27T00:00:00</value> 
      <value>[email protected]</value> 
      <value>TX</value> 
      </row> 
      <row> 
      <value>NANDY</value> 
      <value>F</value> 
      <value>1979-04-19T00:00:00</value> 
      <value>2007-08-27T00:00:00</value> 
      <value>[email protected]</value> 
      <value>PA</value> 
     </row> 
     </data> 
    </dataset> 

은 아래와 OUPUT 기대 값 :

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:EMPLOYEEDETAILS xmlns:ns0="http://net.com/EmployeeDetails"> 
<Records> 
<EmployeeName>JOSEPH</EmployeeName> 
<EmailId>[email protected]</EmailId> 
</Records> 
<Records> 
<EmployeeName>NANDY</EmployeeName> 
<EmailId>[email protected]</EmailId> 
</Records> 
</ns0:EMPLOYEEDETAILS> 

감사합니다. 라비

+2

입력 데이터를 조작한다. 어쨌든 우리는 코딩 서비스가 아닙니다. 문제를 직접 해결하기위한 진실한 선의의 증거를 제시하고, 발생한 특정 문제에 대해 하나 이상의 질문을 제기하십시오. –

+0

안녕하세요, John 님, url에있는 코드별로 시도했습니다. https : //stackoverflow.com/questions/5270568/how-to-use-xslt-to-get-only-certain-rows-and-certain- column . 그것은 작동하지 않습니다. – raviteja

답변

0

아래의 XSLT를 시도해보십시오. 입력 XML에 따라 일치하는 네임 스페이스를 추가로 변경하고 출력에 루트 노드 <EMPLOYEEDETAILS>을 추가해야합니다.

편집 : XSLT 솔루션이 네임 스페이스 문제를 처리하도록 업데이트되었습니다. 루트 노드 <ns0:EMPLOYEEDETAILS>이 솔루션에 포함되어 있습니다. 코드 프로그램을 하이라이트로

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ns0="http://developer.net.com/schemas/xmldata/1/"> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:strip-space elements="*"/> 

    <xsl:param name="param-name" select="1" /> 
    <xsl:param name="param-email" select="5" /> 

    <xsl:template match="/"> 
     <ns0:EMPLOYEEDETAILS> 
      <xsl:for-each select="//ns0:data/ns0:row"> 
       <Records> 
        <xsl:for-each select="ns0:value"> 
         <xsl:choose> 
          <xsl:when test="position() = $param-name"> 
           <EmployeeName> 
            <xsl:value-of select="." /> 
           </EmployeeName> 
          </xsl:when> 
          <xsl:when test="position() = $param-email"> 
           <EmailId> 
            <xsl:value-of select="." /> 
           </EmailId> 
          </xsl:when> 
         </xsl:choose> 
        </xsl:for-each> 
       </Records> 
      </xsl:for-each> 
     </ns0:EMPLOYEEDETAILS> 
    </xsl:template> 
</xsl:stylesheet> 

출력

<ns0:EMPLOYEEDETAILS xmlns:ns0="http://developer.net.com/schemas/xmldata/1/"> 
    <Records> 
     <EmployeeName>JOSEPH</EmployeeName> 
     <EmailId>[email protected]</EmailId> 
    </Records> 
    <Records> 
     <EmployeeName>NANDY</EmployeeName> 
     <EmailId>[email protected]</EmailId> 
    </Records> 
</ns0:EMPLOYEEDETAILS> 
+0

안녕하세요 Aniket, 우리는 주어진 코드를 시도했지만 ouptut 결과가 예상대로되지 않습니다. 시나리오를 테스트하려면 온라인 toolz.com을 사용하십시오. 주어진 xslt의 출력은 다음과 같습니다. JOSEPHF1979-04-19T00 : 00 : 002007-08-27T00 : 00 : 00joseph.Tim @ gmail.comTXNANDYF1979-04-19T00 : 00 : 002007-08-27T00 : 00 : 00Nandy123 @ gmailcomPA – raviteja

+0

당신이 보여준 결과를 얻는 이유가 확실하지 않습니다. 게시 된 답변의 결과를 보려면 [link] (http://xsltransform.net/6pS1zDJ)를 참조하십시오. 여전히 문제가있는 경우 위의 최적화 된 솔루션을 약간 수정하여 예상되는 결과를 얻을 수 있습니다. –

+0

Aniket 님, 문제의 원인입니다. – raviteja