更新,包括一些额外的细微差别复杂的场景为XSLT
我有一个XML的情况,这将需要一些复杂的XSLT。我一直试图自己弄清楚,但迄今为止还没有失败。
首先,这里是一个模拟XML结构。
<Author id="1234">
<reviews>poor</reviews>
<Media>
<MediaSet>
<MediaCode type="CD">474747</MediaCode>
</MediaSet>
<MediaSet>
<MediaCode type="CD">535353</MediaCode>
</MediaSet>
<MediaSet>
<MediaCode type="eBook">989898</MediaCode>
</MediaSet>
<MediaSet>
<MediaCode type="download">202020</MediaCode>
</MediaSet>
<MediaSet>
<MediaCode type="book">161616</MediaCode>
</MediaSet>
<MediaSet>
<MediaCode type="DVD">828282</MediaCode>
</MediaSet>
<MediaSet>
<OtherCode type="widget" number="747474"/> <!--note different element name and structure-->
</MediaSet>
</Media>
<name>JimBob</name>
</Author>
这个例子是什么我处理的大大简化版本,但我想创建一个输出看起来是这样的一个数据库导入:
<row>
<field name="authorID">1234</field>
<field name="reviews">poor</field>
<field name="CD">474747</field>
<field name="name">JimBob</field>
</row>
<row>
<field name="authorID">1234</field>
<field name="reviews">poor</field>
<field name="CD">535353</field>
<field name="name">JimBob</field>
</row>
<row>
<field name="authorID">1234</field>
<field name="reviews">poor</field>
<field name="eBook">989898</field>
<field name="name">JimBob</field>
</row>
<row>
<field name="authorID">1234</field>
<field name="reviews">poor</field>
<field name="download">989898</field>
<field name="name">JimBob</field>
</row>
<row>
<field name="authorID">1234</field>
<field name="reviews">poor</field>
<field name="widget">555555</field>
<field name="name">JimBob</field>
</row>
- CD,电子书下载可能会发生零次或多次。
- 我需要为每个实例创建一个单独的行
- 我想忽略某些元素(例如“book”,“DVD”等等)。
- 还有的“作者”每个“MediaCodes”自己的独特组合100,000s。
- 有我需要从
我的代码把它从开始XML结构来排了数据库导入/场XML结构工作正常,我处理这个问题拉数据混合元素在存在多个数据点的情况下迭代XML并创建多行。
这是不是可以用XSLT单独管理或我将不得不使用另一种语言来处理?
值得注意的是,我正在处理的XML文件有更复杂的结构,并且大约是325MB。
如果您已经“有从起始XML结构到行/字段XML结构的代码”,请将其发布到此处(如果它的整体时间太长,则为其片段)。 –
我回答了您的问题“原样”。但是,恕我直言,你在将结构导入数据库之前将结构展平,这是一个错误。假设一个关系数据库,将两次数据导入两个单独的表格:作者和媒体,而不是一个冗余重复相同数据的平坦表格。 –
另外,对于媒体类型,您应该有一个单独的字段,其中“CD”,“Ebook”等是*值*,另一个字段用于媒体代码,对于所有类型都是通用的。否则,搜索数据库将变得非常繁琐。 –