首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多量子转换

多量子转换
EN

Stack Overflow用户
提问于 2014-08-27 08:28:50
回答 1查看 19关注 0票数 0

我试图根据限定符的分组来转换以下输入XML,但它不起作用,也没有给出预期的输出。

下面是必须转换的输入XML。

代码语言:javascript
复制
<document>
<item>
    <gtin>1000909090</gtin>
    <attrGroupMany name="foodAndBevPreparationInfo">
        <row>
            <attr name="preparationType">BOILING</attr>
            <attrQualMany name="preparationInstructions">
                <value qual="en">Prep 8</value>
                <value qual="en">Prep 9</value>
                <value qual="ar">Test</value>
            </attrQualMany>
        </row>
    </attrGroupMany>
</item>
</document>

我正在使用的XSLT,但没有给出预期的输出。

XSLT:

代码语言:javascript
复制
<xsl:stylesheet 
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output indent="yes"/>

<xsl:key name="prepmvl" match="preparationInstructions" use="concat(generate-id(..), '|', @qual)" />  

<xsl:template match="document"> 
    <CatalogItem>
 <RelationshipData>
        <xsl:for-each select="item/attrGroupMany[@name ='foodAndBevPreparationInfo']/row">
            <Relationship>
                    <RelationType>Item_Master_Food_And_Bev_Prep_MVL</RelationType>                  
                <RelatedItems count="{count(attrQualMany[@name='preparationInstructions']/value[generate-id() = generate-id(key('prepmvl', concat(generate-id(..), '|', @qual))[1])])}">                        
                <xsl:apply-templates select="attrQualMany[@name='preparationInstructions']/value[generate-id() = generate-id(key('prepmvl', concat(generate-id(..), '|', @qual))[1])]"/> 
                </RelatedItems>
            </Relationship>
        </xsl:for-each>
   </RelationshipData>
    </CatalogItem>

</xsl:template> 

<xsl:template match="preparationInstructions">              
    <RelatedItem1 referenceKey="{concat('Food_And_Bev_Prep_MVL','-',ancestor::item/gtin,'-',attr[@name='preparationType'],'-',@qual)}"/>
</xsl:template>

</xsl:stylesheet>

预期的产出应该是

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<CatalogItem>
<RelationshipData>
    <Relationship>
        <RelationType>Item_Master_Food_And_Bev_Prep_MVL</RelationType>
        <RelatedItems count="2">
            <RelatedItem1 referenceKey="Food_And_Bev_Prep_MVL-1000909090-BOILING-en" />
            <RelatedItem1 referenceKey="Food_And_Bev_Prep_MVL-1000909090-BOILING-ar" />             
        </RelatedItems>
    </Relationship>
</RelationshipData>
</CatalogItem>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-27 08:34:43

你需要改变

代码语言:javascript
复制
<xsl:key name="prepmvl" match="preparationInstructions" use="concat(generate-id(..), '|', @qual)" />

代码语言:javascript
复制
<xsl:key name="prepmvl" match="value" use="concat(generate-id(..), '|', @qual)" />

代码语言:javascript
复制
<xsl:template match="preparationInstructions">              
    <RelatedItem1 referenceKey="{concat('Food_And_Bev_Prep_MVL','-',ancestor::item/gtin,'-',attr[@name='preparationType'],'-',@qual)}"/>
</xsl:template>

代码语言:javascript
复制
<xsl:template match="value">              
    <RelatedItem1 referenceKey="{concat('Food_And_Bev_Prep_MVL','-',ancestor::item/gtin,'-',../preceding-sibling::attr[@name='preparationType'],'-',@qual)}"/>
</xsl:template>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25522371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档