将XML从一个结构转换为另一个结构

时间:2012-02-27 07:01:05

标签: java xml xslt xpath xmlstreamreader

我想转换以下xml结构

<so_product company="Brady Europe EN" part_number="N008153" category="Brady Europe English.Safety Identification.Pipe Markers &amp; Valve Identification.CLP Pipe Markers" description="CLP Pipe Marker on Roll - Hydrazine 127X33RL-T3-P19" >
<image zip_file_key="1" filename="794640.jpg"/>
<so_product_attribute name="Product Number" value="Hydrazine 127X33RL-T3-P19"/>
<so_product_attribute name="QTY/UOM" value="220/Roll"/>
<so_product_attribute name="Brady Material Number" value="B-7541"/>
<so_product_attribute name="Class" value="Flamable / non flamable liquids / Oils"/>
<so_product_attribute name="Colour" value="White on Brown"/>
<so_product_attribute name="Layout" value="3"/>
<so_product_attribute name="Legend" value="Hydrazine"/>
<so_product_attribute name="Material Type" value="Laminated Polyester"/>
<so_product_attribute name="Size - Height (mm)" value="33"/>
<so_product_attribute name="Size - Width (mm)" value="127"/>
<so_product_attribute name="Type" value="DANGER"/>
<so_product_attribute name="Danger Symbol" value="CLP 2^CLP 6^CLP 8^CLP 5^CLP 9"/>

采用以下格式

<?xml version="1.0" encoding="utf-8"?>

<stockItems>
    <stockItem>
        <reference>12345A2HC101</reference>
        <stockGroup>Brady Europe English.Data Collection &amp; RFID.Barcode Scanners &amp; Hardware"</stockGroup>
        <webListingImageUF>webFolder/images/productXSmall.gif(image@filename)</webListingImageUF>
        <webListingTextOrHTML>Listing description</webListingTextOrHTML>
        <webMoreInfoImageUF>webFolder/images/productXLarge.gif(image@filename)</webMoreInfoImageUF>
        <webMoreInfoTextOrHTML>Long Description</webMoreInfoTextOrHTML> 
    </stockItem>
</stockItems>

“so product”需要转换为“stockItem”。属性“part_number”的值需要包含在“reference”标记内。 “image”标签中属性“filename”的值需要包含在“webListingImageUF”标签中。如何做到这一点?我的xml文件的文件大小是29MB,其中很多“so_product”重复。

我尝试使用XPath,出现内存错误。目前我正在尝试使用javax.xml.stream 接口XMLStreamReader,这里我首先将标签名称转换为我想要的标签名称(例如“so_product”到“stockItem”,“image”到“reference”)现在我想在“参考”中包含“part_number”属性值“标签。

请帮帮我..我想今天提交。

1 个答案:

答案 0 :(得分:3)

在几行XSLT中解决这个问题看起来很简单,但是你还没有提供足够的细节来看看转换的任何方面是否都很棘手:很难看到你的输入和输出之间的关系。如今,29Mb对XSLT来说不是问题。