在XML / Xpath中转义引号的特定问题

时间:2018-11-09 16:50:41

标签: xml xslt xpath tibco

我对某些包含引号的入站邮件有特定的问题(例如),的-Hertogenbosch ,并且我需要转义第一个引号,因为我无法将整个节点集注入到DataBase ..谁能告诉我解决方案,如何才能忽略该引号?。或简要地说,除了第一和最后一条,我如何才能动态地在每个入站消息中自动转义不必要的引号。

我尝试了translate($ InboundMessage,'“',”(blankspace)“),它工作正常,但是删除了所有引号。.我需要保留第一个和最后一个..例如,我的入站消息是

“去年我访问了's-Hertogenbosch'。。单引号是有害的,因为在输出中我得到了'我访问过的去年',而没有城市的名称。

解决方案?

致谢。

1 个答案:

答案 0 :(得分:2)

尝试使用此表达式。...

<xsl:value-of select="replace($InboundMessage, '(.)&quot;+(.)', '$1$2')"/>

或者,如果您想使用双引号...

<xsl:value-of select='concat(substring($InboundMessage, 1, 1), translate(substring($InboundMessage, 2, string-length($InboundMessage) - 2), "&apos;", ""), substring($InboundMessage, string-length($InboundMessage)))'/>

编辑:如果只能使用XSLT1.0和XPATH 1.0,则必须进行一些字符串操作

<xsl:value-of select='concat("INSERT INTO ", $Destination, " (", $Column, ") VALUES (&apos;", translate($InboundMessage, "&apos;", ""), "&apos;)")'/>

或者,鉴于您对构建SQL的评论,您可以替换所有的撇号,然后将外部的撇号放回所构建的SQL字符串中

    private void PrintMousePos(int x, int y, MouseEventArgs e)
    {
        PointF[] location = { new PointF(x, y) };
        inverseTransform.TransformPoints(location);

        if (NewPolygon != null)
        {
            // We are already drawing a polygon.
            // If it's the right mouse button, finish this polygon.
            if (e.Button == MouseButtons.Right)
            {
                // Finish this polygon.
                if (NewPolygon.Count > 2) Polygons.Add(NewPolygon);
                NewPolygon = null;
            }
            else
            {
                // Add a point to this polygon.
                if (NewPolygon[NewPolygon.Count - 1] != Location)
                {
                    NewPolygon.Add(location[0]);
                }
            }
        }
        else
        {
            // Start a new polygon.
            NewPolygon = new List<PointF>();
            NewPoint = Location;
            NewPolygon.Add(location[0]);
        }


        // Redraw.
        picCanvas.Invalidate();

    }