XSLT删除双引号或单引号



我对XSLT的工作原理有了基本的了解,并且确信我需要以某种方式使用Replace函数。但是我怎么也想不明白。

我正在将一个丑陋的Quickbooks xml报告从api转换成一个我可以管理的CSV,它确实是我想要的,除了有一个额外的"其中一个block将所有内容从导出行中删除我不确定如何在XSLT文件

中检查这一点下面是xslt文件:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:strip-space elements="*" />
<xsl:variable name="delimiter" select="','"/>
<xsl:variable name="Quotes" select="'&quot;'"/>
<xsl:template match="/">
<xsl:for-each select="QBXML/QBXMLMsgsRs/GeneralDetailReportQueryRs/ReportRet/ReportData/DataRow">
<xsl:value-of select="$Quotes"/>
<xsl:value-of select="./RowData/@value[../@rowType]"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
<xsl:value-of select="./ColData/@value[../@colID=2]"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
<xsl:value-of select="./ColData/@value[../@colID=3]"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
<xsl:value-of select="./ColData/@value[../@colID=4]"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
<xsl:value-of select="./ColData/@value[../@colID=5]"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
<xsl:value-of select="./ColData/@value[../@colID=6]"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
<xsl:value-of select="./ColData/@value[../@colID=7]"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
<xsl:value-of select="./ColData/@value[../@colID=8]"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
<xsl:value-of select="./ColData/@value[../@colID=9]"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
<xsl:value-of select="./ColData/@value[../@colID=10]"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
<xsl:value-of select="./ColData/@value[../@colID=11]"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
<xsl:value-of select="./ColData/@value[../@colID=12]"/>
<xsl:value-of select="$Quotes"/>
<xsl:text>&#xa;</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

问题中的具体行是这样的:

<DataRow  rowNumber="1409">
<RowData  rowType="item" value="Triaxle Stone 2A Modified 3/4&quot;" />
<ColData  colID="2" value="Sales Order" />
<ColData  colID="3" value="2020-04-24" />
<ColData  colID="4" value="2020-04-24" />
<ColData  colID="5" value="5810" />
<ColData  colID="6" value="SCHMIDT, JOHN" />
<ColData  colID="7" value="22" />
<ColData  colID="8" value="21.65" />
<ColData  colID="9" value="0.35" />
<ColData  colID="10" value="ton" />
<ColData  colID="11" value="354.86" />
<ColData  colID="12" value="5.65" />
</DataRow>

我在Linux上使用XSLT-1.0处理器xsltproc测试了XML/XSLT组合。它运行得完美无缺。XML中唯一的"(&quot;)表示项目(3/4")的度量。

但是如果你真的需要删除这个"字符,你可以用fn:translate()函数从输出中删除它:

<xsl:value-of select="translate(./RowData/@value[../@rowType],'&quot;','')"/>

或者,在某些上下文中

...
<xsl:template match="/">
<xsl:for-each select="DataRow">
<xsl:value-of select="$Quotes"/>
<xsl:value-of select="translate(./RowData/@value[../@rowType],'&quot;','')"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
<xsl:value-of select="./ColData/@value[../@colID=2]"/>
<xsl:value-of select="concat($Quotes,$delimiter,$Quotes)"/>
...

相关内容

  • 没有找到相关文章

最新更新