Xslt 更改XML节点结构
我有一个结果集结构,例如Xslt 更改XML节点结构,xslt,tags,Xslt,Tags,我有一个结果集结构,例如 <ResultSets> <ResultSet rowCount="100"> <Row> <InvoiceNr>12345</InvoiceNr> <InvoiceItem>0</InvoiceItem> <Year>2014</Year> &
<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>
12345
0
2014
201401
201402
123456
123452
1.
2014
201401
201402
123452
我需要将结构更改为
<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>
12345
0
2014
201401
201402
123456
123452
1.
2014
201401
201402
123452
我现在已经用(这不是实际的代码,只是一个想法)完成了它,而且它是有效的。但是有没有一种方法可以不显式地标识列标记名,而只使用一个语句捕获所有子标记并将其放入值structure中呢
<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>
....
***另一个问题。按照我原来的结构。我可能有ResultSet/ResultSet或只是ResultSet(取决于它运行的查询类型),我如何忽略它,只说ResultSet/ResultSet/Row或ResultSet/Row都可以工作
有没有办法不显式标识列标记名并使用
语句,该语句只捕获所有子标记并将其放入值中
结构
<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>
这样试试
<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/ResultSet或只是ResultSet(取决于类型) 我怎么能忽略这一点,只说其中一个呢 ResultSet/ResultSet/Row或ResultSet/Row可以工作吗 使用:
哦。。还有一件事。无论如何,要排除 陈述例如,选择 除了标记名=
?,其他所有内容
是,使用谓词:
Brilliant,有什么好书或资源可以学习吗?我真的需要快速地对XSLT和XPATH进行抱怨!但无论如何。非常感谢你@用户3379902我肯定有,但我不是问这个问题的合适人选。哦。。还有一件事。无论如何,要排除语句中的某些标记。例如,选择除标记名=??之外的所有内容??
<xsl:for-each select="*[not(self::EXEMPT_ID)]">