Xml 使用XSLT将逗号替换为空格

Xml 使用XSLT将逗号替换为空格,xml,xslt,csv,translate,Xml,Xslt,Csv,Translate,我正在尝试使用xslt从xml文件中删除逗号。 如何用空格正确替换节点或属性值中包含的任何逗号 这是我的xslt文件: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="urn:com.workday/bsvc"> <xsl:output meth

我正在尝试使用xslt从xml文件中删除逗号。 如何用空格正确替换节点或属性值中包含的任何逗号

这是我的xslt文件:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="urn:com.workday/bsvc">
    <xsl:output method="text" encoding="utf-8" media-type="text/plain" />
    <xsl:strip-space  elements="*"/>

<xsl:variable name="newline" select="'&#x0A;'" />
<xsl:variable name="tab" select="'&#x09;'" />
<xsl:variable name="comma" select="'&#x2C;'" />
<xsl:variable name="padding" select="'                              '" /> <!-- 30 spaces for padding -->

<!-- Longest Column Header Text is 39 letters long -->
<xsl:variable name="FAO" select="concat('FAO', $padding, $padding)" />
<xsl:variable name="FAO1" select="concat('FAO REFERENCE ID', '')" />
<xsl:variable name="FAO2" select="concat('FAO TYPE', $padding)" />
<xsl:variable name="RESP" select="concat('RESPONSIBLE PERSON', $padding, $padding, $padding, $padding)" />


<xsl:template match="/">
<!--        <xsl:variable name="textVal" select="*/text()" />  
        <xsl:value-of select="translate($textVal, ',' ,' ')" />-->
    <xsl:value-of select="$FAO"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="$FAO1"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="$FAO2"/><xsl:value-of select="$comma"/>
    <xsl:value-of select="$RESP"/><xsl:value-of select="$comma"/>
<xsl:value-of select="$newline"/>

    <xsl:for-each select="/wd:Report_Data/wd:Report_Entry">
        <xsl:value-of select="substring(concat(wd:FAO, $padding, $padding, $padding, $padding, $padding), 1, string-length($FAO))" /><xsl:value-of select="$comma"/>
        <xsl:value-of select="substring(concat(wd:FAO_REFERENCE_ID, $padding, $padding, $padding, $padding, $padding), 1, string-length($FAO1))" /><xsl:value-of select="$comma"/>
        <xsl:value-of select="substring(concat(wd:FAO_TYPE, $padding, $padding, $padding, $padding, $padding), 1, string-length($FAO2))" /><xsl:value-of select="$comma"/>
        <xsl:value-of select="substring(concat(wd:RESPONSIBLE_PERSON/@wd:Descriptor, $padding, $padding, $padding, $padding, $padding), 1, string-length($RESP))" /><xsl:value-of select="$comma"/>
    </xsl:for-each>
</xsl:template>

<xsl:template match="*">
    <xsl:variable name="textVal" select="*/text()" />  
    <xsl:value-of select="translate($textVal, ',' ,' ')" />
</xsl:template>

</xsl:stylesheet>

我的输出是一个CSV文件,所以我想用空格替换任何包含逗号的节点和属性值

尝试用空格替换逗号的第二个模板不起作用。 我还尝试将这两条语句放在第一个模板的开头,但效果并不理想。


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="urn:com.workday/bsvc">
    <xsl:output method="text" encoding="utf-8" media-type="text/plain" />
    <xsl:strip-space  elements="*"/>

<xsl:template match="@*|node()">
    <xsl:for-each select="@*|text()">
        <xsl:variable name="textVal" select="current()" />  
        <xsl:value-of select="translate($textVal, ',' ,' ')" />
    </xsl:for-each>
    <xsl:apply-templates/>
</xsl:template>

</xsl:stylesheet>



您的
*
模板中的
translate()
没有任何作用,因为该模板从未被使用过-您的
模板匹配=“/”
只执行一系列
值的
指令,它从不调用
应用模板
来触发
*
模板

您需要将翻译分别放入
的每个
值中,例如

<xsl:value-of select="translate(substring(concat(wd:FAO,$padding, $padding,
    $padding, $padding, $padding), 1, string-length($FAO)), ',', ' ')" />
使用以下模板

<xsl:template match="wd:*">
    <xsl:param name="header" />
    <xsl:value-of select="translate(substring(concat(., $padding, $padding,
      $padding, $padding, $padding), 1, string-length($header)), ',', ' ')" />
</xsl:template>

您的
*
模板中的
translate()
没有任何作用,因为该模板从未被使用过-您的
模板匹配=“/”
只执行一系列
值的
指令,它从不调用
应用模板
来触发
*
模板

您需要将翻译分别放入
的每个
值中,例如

<xsl:value-of select="translate(substring(concat(wd:FAO,$padding, $padding,
    $padding, $padding, $padding), 1, string-length($FAO)), ',', ' ')" />
使用以下模板

<xsl:template match="wd:*">
    <xsl:param name="header" />
    <xsl:value-of select="translate(substring(concat(., $padding, $padding,
      $padding, $padding, $padding), 1, string-length($header)), ',', ' ')" />
</xsl:template>

您的
*
模板中的
translate()
没有任何作用,因为该模板从未被使用过-您的
模板匹配=“/”
只执行一系列
值的
指令,它从不调用
应用模板
来触发
*
模板

您需要将翻译分别放入
的每个
值中,例如

<xsl:value-of select="translate(substring(concat(wd:FAO,$padding, $padding,
    $padding, $padding, $padding), 1, string-length($FAO)), ',', ' ')" />
使用以下模板

<xsl:template match="wd:*">
    <xsl:param name="header" />
    <xsl:value-of select="translate(substring(concat(., $padding, $padding,
      $padding, $padding, $padding), 1, string-length($header)), ',', ' ')" />
</xsl:template>

您的
*
模板中的
translate()
没有任何作用,因为该模板从未被使用过-您的
模板匹配=“/”
只执行一系列
值的
指令,它从不调用
应用模板
来触发
*
模板

您需要将翻译分别放入
的每个
值中,例如

<xsl:value-of select="translate(substring(concat(wd:FAO,$padding, $padding,
    $padding, $padding, $padding), 1, string-length($FAO)), ',', ' ')" />
使用以下模板

<xsl:template match="wd:*">
    <xsl:param name="header" />
    <xsl:value-of select="translate(substring(concat(., $padding, $padding,
      $padding, $padding, $padding), 1, string-length($header)), ',', ' ')" />
</xsl:template>

如果您使用的是XSLT2.0,那么可以使用

例如

XML输入

<test>Bacon ipsum dolor sit amet sirloin, venison, swine, 
    ground round, pastrami, rump pig, kevin turducken.</test>
Bacon ipsum dolor sit amet sirloin  venison  swine  
    ground round  pastrami  rump pig  kevin turducken.

如果您使用的是XSLT2.0,那么可以使用

例如

XML输入

<test>Bacon ipsum dolor sit amet sirloin, venison, swine, 
    ground round, pastrami, rump pig, kevin turducken.</test>
Bacon ipsum dolor sit amet sirloin  venison  swine  
    ground round  pastrami  rump pig  kevin turducken.

如果您使用的是XSLT2.0,那么可以使用

例如

XML输入

<test>Bacon ipsum dolor sit amet sirloin, venison, swine, 
    ground round, pastrami, rump pig, kevin turducken.</test>
Bacon ipsum dolor sit amet sirloin  venison  swine  
    ground round  pastrami  rump pig  kevin turducken.

如果您使用的是XSLT2.0,那么可以使用

例如

XML输入

<test>Bacon ipsum dolor sit amet sirloin, venison, swine, 
    ground round, pastrami, rump pig, kevin turducken.</test>
Bacon ipsum dolor sit amet sirloin  venison  swine  
    ground round  pastrami  rump pig  kevin turducken.

可能重复的可能重复的可能重复的可能重复的我使用了你发布的第一种方法,通过将翻译应用到的每个值。ThanksI使用了您发布的第一种方法,将translate应用于的每个值。ThanksI使用了您发布的第一种方法,将translate应用于的每个值。ThanksI使用了您发布的第一种方法,将translate应用于的每个值。谢谢