无法更改元素的值

时间:2018-02-14 04:29:58

标签: xml xslt

我正在尝试从" false"更改元素的值。 to" true"

<ItemMaster>
        <ItemMasterHeader>
            <ItemID>
                <ID>ASSET1</ID>
            </ItemID>
            <DisplayID>ASSET1</DisplayID>
            <GTIN/>
            <ServiceIndicator xmlns="">false</ServiceIndicator>
            <Description>AC SPLIT WALL 1.5 PKPANASONICS</Description>
            <Note/>
            <Classification>
                <Codes>
                    <Code listID="Item Types" sequence="1" xmlns:my="http://schema.com/OAGIS/2">Purchased</Code>
                    <Code listID="Item Groups" sequence="2">4ET</Code>
                    <Code listID="MRO Classes" sequence="3">*</Code>
                </Codes>
            </Classification>
            <HazardousMaterialIndicator>false</HazardousMaterialIndicator>
            <TrackingIndicator>false</TrackingIndicator>

我使用以下XSL:

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
</xsl:template>
    <xsl:template
        match="//my:SyncItemMaster/my:DataArea/my:ItemMaster/my:ItemMasterHeader/my:TrackingIndicator">
            <xsl:value-of select="true" />
    </xsl:template>

但我得到的是:

    <ItemMaster>
        <ItemMasterHeader>
            <ItemID>
                <ID>ASSET1</ID>
            </ItemID>
            <DisplayID>ASSET1</DisplayID>
            <GTIN/>
            <ServiceIndicator xmlns="">false</ServiceIndicator>
            <Description>AC SPLIT WALL 1.5 PKPANASONICS</Description>
            <Note/>
            <Classification>
                <Codes>
                    <Code listID="Item Types" sequence="1" xmlns:my="http://schema.com/OAGIS/2">Purchased</Code>
                    <Code listID="Item Groups" sequence="2">4ET</Code>
                    <Code listID="MRO Classes" sequence="3">*</Code>
                </Codes>
            </Classification>
            <HazardousMaterialIndicator>false</HazardousMaterialIndicator>

相反,该元素完全缺失。

这里可能出了什么问题?它似乎是一个非常基本的功能,但我不知道为什么它会丢失。

更新:

我试图在XSLT中添加一些代码:

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
</xsl:template>
    <xsl:template
        match="//my:SyncItemMaster/my:DataArea/my:ItemMaster/my:ItemMasterHeader/my:TrackingIndicator">
            <xsl:element name="TrackingIndicator">
            <xsl:value-of select="true" />
            </xsl:element>
    </xsl:template>

但现在结果变成了这样:

    <ItemMaster>
        <ItemMasterHeader>
            <ItemID>
                <ID>ASSET1</ID>
            </ItemID>
            <DisplayID>ASSET1</DisplayID>
            <GTIN/>
            <ServiceIndicator xmlns="">false</ServiceIndicator>
            <Description>AC SPLIT WALL 1.5 PKPANASONICS</Description>
            <Note/>
            <Classification>
                <Codes>
                    <Code listID="Item Types" sequence="1" xmlns:my="http://schema.com/OAGIS/2">Purchased</Code>
                    <Code listID="Item Groups" sequence="2">4ET</Code>
                    <Code listID="MRO Classes" sequence="3">*</Code>
                </Codes>
            </Classification>
            <HazardousMaterialIndicator>false</HazardousMaterialIndicator>
            <TrackingIndicator xmlns=""/>

它仍然不像我希望的那样(TrackingIndicator)true(TrackingIndicator)

非常感谢您的帮助:)。

1 个答案:

答案 0 :(得分:1)

请更改以下模板(您可能需要处理任何适用的命名空间)。

<xsl:template match="TrackingIndicator">
    <xsl:copy>
        <xsl:value-of select="'true'" />
    </xsl:copy>
</xsl:template>

您可以仅在模板匹配中提及元素名称,而不是指定整个XPath。要设置值,true应在single quotes中指定为字符串。

输出

<TrackingIndicator>true</TrackingIndicator>