2014-03-07 160 views
0

我有一個結果集結構,如更改XML節點結構

<ResultSets> 
    <ResultSet rowCount="100"> 
     <Row> 
      <InvoiceNr>12345</InvoiceNr> 
      <InvoiceItem>0</InvoiceItem> 
      <Year>2014</Year> 
      <Month>201401</Month> 
      <Week>201402</Week> 
      <ItemCategory/> 
      <BillingType/> 
      <BPCodeSoldTo>123456</BPCodeSoldTo> 
      <BPCodeShipTo/> 
     </Row> 
     <Row> 
      <InvoiceNr>123452</InvoiceNr> 
      <InvoiceItem>1</InvoiceItem> 
      <Year>2014</Year> 
      <Month>201401</Month> 
      <Week>201402</Week> 
      <ItemCategory/> 
      <BillingType/> 
      <BPCodeSoldTo>123452</BPCodeSoldTo> 
      <BPCodeShipTo/> 
      <BPCodeBillTo/> 
     </Row> 
    </ResultSet> 
</ResultSets> 

我需要的結構改變爲

<io> 
<row> 
    <col>12345</col> 
    <col>0</col> 
    <col>2014</col> 
    <col>201401</col> 
    <col>201402</col> 
    <col/> 
    <col/> 
    <col>123456</col> 
    <col/> 
    <col/> 
</row> 
<row> 
    <col>123452</col> 
    <col>1</col> 
    <col>2014</col> 
    <col>201401</col> 
    <col>201402</col> 
    <col/> 
    <col/> 
    <col>123452</col> 
    <col/> 
    <col/> 
</row> 
</io> 

我有做它現在(這是不實際代碼,但只是一個想法),它的工作原理。但是,有沒有一種方法可以不顯式地標識列標籤名稱,並有一個只是捕獲所有子標籤並將其放入值結構的語句?

<row> 
<xsl:foreach../RecordSets/RecordSet/Row> 
    <col> 
    <xsl:value of select = "InvoiceNr"/> 
</col> 
<col> 
<xsl:value of select = "InvoiceItem"/> 
</col> 
<col> 
<xsl:value of select = "Year"/> 
</col> 
<col> 
<xsl:value of select = "InvoiceNr"/> 
</col> 
.... 
</xsl:foreach> 
</row> 

***另一個問題。在我原來的結構中。我可能有ResultSets/ResultSet或Just ResulSet(取決於它所運行的查詢的類型)如何忽略它,只是說ResultSets/ResultSet/Row或ResultSet/Row會起作用?

回答

0

是有辦法沒有明確標識列標籤名,並有 聲明,只是捕獲所有的子標籤並投入價值 strucutre?

試試這個方法嗎?

<xsl:template match="/"> 
    <io> 
     <xsl:for-each select="ResultSets/ResultSet/Row"> 
      <row> 
       <xsl:for-each select="*"> 
        <col><xsl:value-of select="."/></col> 
       </xsl:for-each> 
      </row> 
     </xsl:for-each> 
    </io> 
</xsl:template> 

我可能有結果集/ ResultSet中或剛ResulSet(取決於類型的查詢 是RAN)如何忽略這一點,只是說無論是 的ResultSet /的ResultSet /行或結果集/行會工作?

用途:

<xsl:for-each select="ResultSets/ResultSet/Row | ResultSet/Row"> 

哦..一兩件事。無論如何排除 聲明中的某個標籤。例如,請選擇 ,除非標記名= <EXEMPT_ID>

是,使用謂詞

<xsl:for-each select="*[not(self::EXEMPT_ID)]"> 
+0

輝煌,是否有任何好書或資源來學習呢?我真的需要快速抓住XSLT和XPATH。 但無論如何。非常感謝! – user3379902

+0

@ user3379902我確定有,但我不是正確的人。 –

+0

哦..還有一件事。無論如何要排除語句中的某個標籤。例如,選擇除了如果tagname = ? – user3379902