CSV-> xml,如何消除列

时间:2014-02-04 05:28:42

标签: xml xslt

我有这个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>

2 个答案:

答案 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']"/>