2016-04-20 3 views
0

Я пытаюсь отформатировать данные XML ниже, поэтому он выглядит красиво в браузере с использованием XSLT. Кажется, я не могу извлечь строки.Формат Quickbooks XML с XLST?

Я попытался следующие:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <body> 
    <h2>Quickbooks Test</h2> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
     <th style="text-align:left">Column1</th> 
     <th style="text-align:left">Column2</th> 
     </tr> 
     <xsl:for-each select='//Row[@type="Data"]'> 
     <tr> 
     <td><xsl:value-of select="ColData/@value"/></td> 
     <td><xsl:value-of select="ColData/@value"/></td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

Любые предложения о том, как я могу извлечь @value атрибуты из узлов ColData, в идеале в двух хороших колонок?

Извините, если это очевидно! Я не могу найти его в любом месте с помощью функции поиска ...

===== ОРИГИНАЛЬНЫЕ данных XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Report xmlns="http://schema.intuit.com/finance/v3"> 
    <Header> 
    <Time>2016-04-18T12:03:32-07:00</Time> 
    <ReportName>BalanceSheet</ReportName> 
    <DateMacro>this fiscal year-to-date</DateMacro> 
    <ReportBasis>Accrual</ReportBasis> 
    <StartPeriod>2015-08-01</StartPeriod> 
    <EndPeriod>2016-04-18</EndPeriod> 
    <SummarizeColumnsBy>Total</SummarizeColumnsBy> 
    <Currency>CAD</Currency> 
    <Option> 
     <Name>AccountingStandard</Name> 
     <Value>IFRS</Value> 
    </Option> 
    <Option> 
     <Name>NoReportData</Name> 
     <Value>false</Value> 
    </Option> 
    </Header> 
    <Columns> 
    <Column> 
     <ColTitle/> 
     <ColType>Account</ColType> 
     <MetaData> 
     <Name>ColKey</Name> 
     <Value>account</Value> 
     </MetaData> 
    </Column> 
    <Column> 
     <ColTitle>Total</ColTitle> 
     <ColType>Money</ColType> 
     <MetaData> 
     <Name>ColKey</Name> 
     <Value>total</Value> 
     </MetaData> 
    </Column> 
    </Columns> 
    <Rows> 
    <Row type="Section" group="TotalAssets"> 
     <Header> 
     <ColData value="Assets"/> 
     <ColData value=""/> 
     </Header> 
     <Rows> 
     <Row type="Section" group="OtherCurrentAssets"> 
      <Header> 
      <ColData value="Current Assets"/> 
      <ColData value=""/> 
      </Header> 
      <Rows> 
      <Row type="Data"> 
       <ColData value="Undeposited Funds" id="3"/> 
       <ColData value="353847.76"/> 
      </Row> 
      <Row type="Section" group="BankAccounts"> 
       <Header> 
       <ColData value="Cash and cash equivalents"/> 
       <ColData value=""/> 
       </Header> 
       <Rows> 
       <Row type="Data"> 
        <ColData value="Chequing" id="20"/> 
        <ColData value="-221951.44"/> 
       </Row> 
       </Rows> 
       <Summary> 
       <ColData value="Total Cash and cash equivalents"/> 
       <ColData value="-221951.44"/> 
       </Summary> 
      </Row> 
      <Row type="Section" group="AR"> 
       <Header> 
       <ColData value="Accounts receivable (A/R)"/> 
       <ColData value=""/> 
       </Header> 
       <Rows> 
       <Row type="Data"> 
        <ColData value="Accounts Receivable (A/R)" id="8"/> 
        <ColData value="29520.17"/> 
       </Row> 
       </Rows> 
       <Summary> 
       <ColData value="Total Accounts receivable (A/R)"/> 
       <ColData value="29520.17"/> 
       </Summary> 
      </Row> 
      </Rows> 
      <Summary> 
      <ColData value="Total Current Assets"/> 
      <ColData value="161416.49"/> 
      </Summary> 
     </Row> 
     </Rows> 
     <Summary> 
     <ColData value="Total Assets"/> 
     <ColData value="161416.49"/> 
     </Summary> 
    </Row> 
    <Row type="Section" group="TotalLiabilitiesAndEquity"> 
     <Header> 
     <ColData value="Liabilities and Equity"/> 
     <ColData value=""/> 
     </Header> 
     <Rows> 
     <Row type="Section" group="OtherCurrentLiabilities"> 
      <Header> 
      <ColData value="Current Liabilities"/> 
      <ColData value=""/> 
      </Header> 
      <Rows> 
      <Row type="Data"> 
       <ColData value="GST/HST Payable" id="9"/> 
       <ColData value="22363.06"/> 
      </Row> 
      <Row type="Section"> 
       <Header> 
       <ColData value="Payroll Liabilities" id="46"/> 
       <ColData value=""/> 
       </Header> 
       <Rows> 
       <Row type="Data"> 
        <ColData value="Federal Taxes" id="47"/> 
        <ColData value="1180.75"/> 
       </Row> 
       </Rows> 
       <Summary> 
       <ColData value="Total Payroll Liabilities"/> 
       <ColData value="1180.75"/> 
       </Summary> 
      </Row> 
      <Row type="Section" group="AP"> 
       <Header> 
       <ColData value="Accounts Payable"/> 
       <ColData value=""/> 
       </Header> 
       <Rows> 
       <Row type="Data"> 
        <ColData value="Accounts Payable (A/P)" id="18"/> 
        <ColData value="-724.78"/> 
       </Row> 
       </Rows> 
       <Summary> 
       <ColData value="Total Accounts Payable"/> 
       <ColData value="-724.78"/> 
       </Summary> 
      </Row> 
      </Rows> 
      <Summary> 
      <ColData value="Total Current Liabilities"/> 
      <ColData value="22819.03"/> 
      </Summary> 
     </Row> 
     <Row type="Section" group="Equity"> 
      <Header> 
      <ColData value="Equity"/> 
      <ColData value=""/> 
      </Header> 
      <Rows> 
      <Row type="Data"> 
       <ColData value="Retained Earnings" id="2"/> 
       <ColData value="32298.57"/> 
      </Row> 
      <Row type="Data" group="NetIncome"> 
       <ColData value="Profit for the year"/> 
       <ColData value="106298.89"/> 
      </Row> 
      </Rows> 
      <Summary> 
      <ColData value="Total Equity"/> 
      <ColData value="138597.46"/> 
      </Summary> 
     </Row> 
     </Rows> 
     <Summary> 
     <ColData value="Total Liabilities and Equity"/> 
     <ColData value="161416.49"/> 
     </Summary> 
    </Row> 
    </Rows> 
</Report> 

ответ

0

У вас есть две проблемы:

  1. Ваш источник XML поставил все свои элементы в пространстве имен ; вы должны объявить это пространство имен в своей таблице стилей, назначить ему префикс и использовать этот префикс при обращении к элементам в исходном XML.

  2. Вы выбираете одно и то же значение для обеих ячеек строки.

Попробуйте этот способ вместо (это предполагает, что ряд данных всегда будет иметь две ячейки):

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ns1="http://schema.intuit.com/finance/v3"> 

<xsl:template match="/"> 
    <html> 
     <body> 
      <h2>Quickbooks Test</h2> 
      <table border="1"> 
       <tr bgcolor="#9acd32"> 
        <th style="text-align:left">Column1</th> 
        <th style="text-align:left">Column2</th> 
       </tr> 
       <xsl:for-each select='//ns1:Row[@type="Data"]'> 
        <tr> 
         <td><xsl:value-of select="ns1:ColData[1]/@value"/></td> 
         <td><xsl:value-of select="ns1:ColData[2]/@value"/></td> 
        </tr> 
       </xsl:for-each> 
      </table> 
     </body> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 
+0

Это фантастика !! Бесконечно благодарен! –

Смежные вопросы