2012-08-02 7 views
0

Webservice에서 XML 응답을 받고 있습니다. XSLT를 사용하여이 XML을 변환하고 DB에 데이터를 삽입해야한다. 샘플 XML 응답은 다음과 같습니다.XSLT를 사용하여 배열을 선언하는 방법

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Body> 
<ttordhdr> 
<ttordhdrRow> 
    <OH-ORDNBR>123</OH-ORDNBR> 
    <OH-ORDTYPE>B</OH-ORDTYPE> 
    <OH-DSTNFLR></OH-DSTNFLR> 
    <OH-RCVTYP>P</OH-RCVTYP> 
    </ttordhdrRow> 
    <ttordhdrRow> 
    <OH-ORDNBR>456</OH-ORDNBR> 
    <OH-ORDTYPE>c</OH-ORDTYPE> 
    <OH-DSTNFLR></OH-DSTNFLR> 
    <OH-RCVTYP>P</OH-RCVTYP> 
    </ttordhdrRow> 
</ttordhdr> 
<ttordline> 
<ttordlineRow> 
    <OH-ORDNBR>123</OH-ORDNBR> 
    <OL-ORDLNNBR>1</OL-ORDLNNBR> 
    <OL-ITEMTYPE>true</OL-ITEMTYPE> 
    <OL-QTY>10</OL-QTY> 
    <OL-DISP></OL-DISP> 
    </ttordlineRow> 
    <ttordlineRow> 
    <OH-ORDNBR>123</OH-ORDNBR> 
    <OL-ORDLNNBR>1</OL-ORDLNNBR> 
    <OL-ITEMTYPE>true</OL-ITEMTYPE> 
    <OL-QTY>10</OL-QTY> 
    <OL-DISP></OL-DISP> 
    </ttordlineRow> 
    </ttordline> 
</SOAP-ENV:Body> 

내 요구 사항은 모두 from/where가 'B'입니다. /로 매핑하고 해당하는 것을 얻습니다.

나는 배열을 저장하고 매핑 할 수 있다고 생각한다. 이

+0

무슨 뜻인지 좀 더 설명해 주시겠습니까? 텍스트에 'B'의 응답이있는 곳이라면 어디서나 찾을 수 있으며 발견 된 요소와 함께 저장하고 싶습니까? 그래서 B 은 OH-ORDTYPE을 반환합니까? 그리고 그걸로 무엇을하고 싶니? 하나의 XPath가 그것을 줄 것이다. (// * [text() = 'B'] – Woody

+0

실제로 'OH-ORDTYPE'= B 인 'ttordhdrRow'에서 'OH-ORDNBR'을 모두 선택하면된다. 'OH-ORDNBR'을 'ttordlineRow/OH-ORDNBR'과 매핑하고 'ttordhdrRow'에서 해당 'OH-ORDNBR'을 가져옵니다. – user1571041

+0

우선 XML 파일의 형식이 잘못되었습니다. 의 순서가 서로 바뀝니다. – CSharp

답변

0

당신은 아직도 당신이 데이터로 수행 할 작업을 지정하지 않은 날 도움이되지만 다음과 같은 XSLT 1.0 템플릿하십시오 : 데이터에

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 

<xsl:output method="xml" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:apply-templates select="//ttordhdr/ttordhdrRow[OH-ORDTYPE[text()='B']]/OH-ORDNBR"/> 
</xsl:template> 

<xsl:template match="OH-ORDNBR"> 
    <xsl:variable name="val" select="text()"/> 
    <xsl:apply-templates select="//ttordline/ttordlineRow[OH-ORDNBR = $val]"/> 
</xsl:template> 

<xsl:template match="ttordlineRow"> 
    <!-- do something here --> 
    For OH-ORDNBR <xsl:value-of select="OH-ORDNBR"/> 
</xsl:template> 
</xsl:stylesheet> 

을 적용 제공 :

<?xml version="1.0" encoding="utf-8"?> 
    For OH-ORDNBR 123 
    For OH-ORDNBR 123 

분명히 그다지 좋지는 않지만 하단의 템플릿 (여기서는 무언가를 말합니다)에서 일치하는 모든 단일 ttordlineRow를 얻을 수 있으므로 최종적으로 결정해야 할 작업을 수행 할 수 있습니다.

관련 문제