2014-03-07 163 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