대략 주 나이 I asked the question here 및 도움을 얻었다. 이제 내 질문에 계속됩니다. 원래 XML을 텍스트 파일로 변환해야했습니다. 다음은 샘플 XML 파일입니다 :XSLT를 사용하여 XML 특성 존재를 확인하는 방법
<DOC xsi:noNamespaceSchemaLocation="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DOC_REQUISITES DOC_DATE="2009-04-23" DOC_NO="99999999"/>
<DOCID TradeDate="2009-04-23" Weekday="Monday" MainFirmId="ZXC0000" FirmName="Firm Name" FirmINN="1234567899">
<FIRM FirmID="FirmId">
<CURRENCY CurrencyId="USD">
<DEPARTMENT DepartmentId="ABCD" DepName="Department Name1">
<SETTLEDATE SettleDate="2009-04-23">
<SECURITY SecurityId="QAZ" SecShortName="SecName1" SecurityType="dc" FaceValue="5">
<TRDACC TrdAccId="ABC00000">
<RECORDS RecNo="1" TradeNo="111" TradeTime="15:15:16" Price="10" Quantity="50" Value="500"/>
</TRDACC>
<TRDACC TrdAccId="SDC00000">
<RECORDS RecNo="2" TradeNo="112" TradeTime="15:15:16" Price="10" Quantity="50" Value="500"/>
<RECORDS RecNo="3" TradeNo="113" TradeTime="15:15:16" Price="20" Quantity="10" Value="200"/>
</TRDACC>
</SECURITY>
<SECURITY SecurityId="WSX" SecShortName="SecName2" SecurityType="dc" FaceValue="1">
<TRDACC TrdAccId="ABC00000">
<RECORDS RecNo="4" TradeNo="114" TradeTime="15:15:13" Price="2" Quantity="1" Value="2"/>
</TRDACC>
</SECURITY>
</SETTLEDATE>
</DEPARTMENT>
<DEPARTMENT DepartmentId="CBSD" DepName="Department Name2">
<SETTLEDATE SettleDate="2009-05-20">
<SECURITY SecurityId="RFV" SecShortName="SecName3" SecurityType="dc" FaceValue="2">
<TRDACC TrdAccId="SDC00000">
<RECORDS RecNo="5" TradeNo="115" TradeTime="15:15:13" Price="100" Quantity="10" Value="1000"/>
</TRDACC>
</SECURITY>
</SETTLEDATE>
</DEPARTMENT>
</CURRENCY>
</FIRM>
</DOCID>
내 원하는 출력은 다음과 같습니다
2009-04-23,99999999,2009-04-23,Monday,ZXC0000,Firm Name,1234567899,FirmId,USD,ABCD,Department Name1,2009-04-23,QAZ,SecName1,dc,5,ABC00000,1,111,15:15:16,10,50,500
2009-04-23,99999999,2009-04-23,Monday,ZXC0000,Firm Name,1234567899,FirmId,USD,ABCD,Department Name1,2009-04-23,QAZ,SecName1,dc,5,SDC00000,2,112,15:15:16,10,50,500
2009-04-23,99999999,2009-04-23,Monday,ZXC0000,Firm Name,1234567899,FirmId,USD,ABCD,Department Name1,2009-04-23,QAZ,SecName1,dc,5,SDC00000,3,113,15:15:16,20,10,200
2009-04-23,99999999,2009-04-23,Monday,ZXC0000,Firm Name,1234567899,FirmId,USD,ABCD,Department Name1,2009-04-23,WSX,SecName2,dc,1,ABC00000,4,114,15:15:13,2,1,2
2009-04-23,99999999,2009-04-23,Monday,ZXC0000,Firm Name,1234567899,FirmId,USD,CBSD,Department Name2,2009-05-20,RFV,SecName3,dc,2,SDC00000,5,115,15:15:13,100,10,1000
이 XSLT 나를 위해 배치되고 그냥 잘 작동합니다. 정말 감사. 생성 된 출력 파일은 나중에 데이터베이스에로드 될 것입니다 :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes" encoding="UTF-8" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="/DOC/DOCID/FIRM/CURRENCY/DEPARTMENT/SETTLEDATE/SECURITY/TRDACC"/>
</xsl:template>
<xsl:template match="TRDACC">
<!--Select all of the attribute values from the preceding DOC_REQUISITES attibutes, TRDACC ancestor elements, the current element, and all of it's descendants and then apply-templates to those attributes -->
<xsl:apply-templates select="preceding::DOC_REQUISITES/@* | ancestor::*[not(local-name()='DOC')]/@* | @* | descendant::*/@*"/>
<!--Adds a carriage return at the end of the line -->
<xsl:value-of select="' '"/>
</xsl:template>
<!--Template match for attributes that emits the attribute value and a ',', except for the last one -->
<xsl:template match="@*[.!='']">
<xsl:value-of select="."/>
<xsl:if test="position()!=last()">,</xsl:if>
</xsl:template>
</xsl:stylesheet>
여기 내 질문이다. 테이블의 열은 xml 파일 특성에 해당합니다. 일부 열은 Null을 허용했습니다. 이는 일부 속성을 생략 할 수 있음을 의미합니다. 예를 들어, attr. DOC_NO은, 평일은 SettleDate는 RECNO 출력 기록이이 같은 모습이어야 존재하지 : 즉
2009-04-23,,2009-04-23,,ZXC0000,Firm Name,1234567899,FirmId,USD,ABCD,Department Name1,,QAZ,SecName1,dc,5,ABC00000,,111,15:15:16,10,50,500
나는 각 속성의 존재를 확인해야합니다. 나는 그것을 해결하려고하지만 내 xslt 지식은 매우 제한되어 있습니다. 도와주세요. 감사.
문서에 속성이 있습니까 (예 :'SettleDate = ""') 값이 없거나 문서에서 누락 된 속성입니까? –
속성이 누락되었을 수 있습니다. – klipa