我有这个xml。它实际上是一个转换为xml的制表符分隔文件。 <R i="0">
包含列标题,C = 1到C = 8是列。我需要消除例如“Size 1”和“Height 1”并创建一个xml输出。我只想从每一行中消除尺寸1和高度1并保留其余部分。你能帮忙吗?
<Message>
<Header/>
<Data>
<Data>
<R i="0">
<C i="0">Sample File</C>
<C i="1">Sample Name</C>
<C i="2">Dye</C>
<C i="3">Size 1</C>
<C i="4">Size 2</C>
<C i="5">Height 1</C>
<C i="6">Height 2</C>
<C i="7">Peak Area 1</C>
<C i="8">Peak Area 2</C>
</R>
<R i="1">
<C i="0">100CTRL-NEW3-LOT_2014-01-21_D06.fsa</C>
<C i="1">100CTRL-NEW3-LOT</C>
<C i="2">B</C>
<C i="3">143.84</C>
<C i="4">148.3</C>
<C i="5">3331</C>
<C i="6">2024</C>
<C i="7">30513</C>
<C i="8">18020</C>
</R>
<R i="2">
<C i="0">100CTRL-NEW3-LOT_2014-01-21_D06.fsa</C>
<C i="1">100CTRL-NEW3-LOT</C>
<C i="2">B</C>
<C i="3">204.1</C>
<C i="4"/>
<C i="5">4461</C>
<C i="6"/>
<C i="7">40664</C>
<C i="8"/>
</R>
</Data>
</Data>
</Message>
答案 0 :(得分:1)
以这种方式尝试:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method='xml' version='1.0' encoding='utf-8' indent='yes'/>
<xsl:key name="header" match="C[parent::R/@i='0']" use="@i" />
<!-- copy everything as is -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- except -->
<xsl:template match="C[key('header', @i)='Size 1' or key('header', @i)='Height 1']"/>
</xsl:stylesheet>
P.S。我不确定你的意思是什么“消除例如”尺寸1“和”高度1“”;它可能意味着and
,它可能意味着or
;像Lingamurthy CS一样,我猜测or
,但它应该很容易改变。
答案 1 :(得分:0)
您可以通过指定不对这些列执行任何操作的模板来删除“大小1”和“高度1”的列,并复制其余部分
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="C[. = 'Size 1' or . = 'Height 1']"/>