0

我遇到了很多人似乎都遇到的问题,使用 Web 服务创建 XML 文件,但我遇到的问题是编码都是错误的,而不是正确的 XML:

所以它看起来像这样:

 <?xml version="1.0" encoding="utf-16"?>
<string>&lt;!--This file generated by XMLPull tool on 06/28/2012 05:01:21 AM--&gt;
&lt;!--Datasource: Ticket--&gt;
&lt;DATASET&gt;&lt;DATAROW&gt;&lt;TicketDesc&gt;TEST TICKET&lt;/TicketDesc&gt;&lt;/DATAROW&gt;&lt;/DATASET&gt;</string>

代替

<?xml version="1.0" encoding="UTF-16"?><!--This file generated by the XMLPull tool on 6/28/2012--><!--Datasource: Ticket--><DATASET><DATAROW TicketDesc="TEST TICKET></DATASET>

和使用的架构:

<?xml version="1.0"?>
<xsd:schema id="DATASET" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="DATASET">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element ref="DATAROW" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>
<xsd:element name="DATAROW">
    <xsd:annotation>
        <xsd:appinfo/>
    </xsd:annotation>
    <xsd:complexType>
        <xsd:attribute name="TicketDesc">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:maxLength value="2048"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:attribute>
    </xsd:complexType>
</xsd:element>
</xsd:schema>

因此,该文件似乎来自 web 服务(带有 html 标记?)我如何更改上面的架构以匹配此文件:

<?xml version="1.0" encoding="UTF-16"?><!--This file generated by the XMLPull tool on 6/28/2012--><!--Datasource: Ticket--><DATASET><DATAROW TicketDesc="TEST TICKET></DATASET>

我曾尝试在 SSIS 中弄乱 XML Task 和 XPATH,但格式仍然错误。

4

3 回答 3

0

也许在xml 任务中您可以选择XSLT 操作,将 xml 转换为有效的 xml

于 2013-05-14T12:41:42.597 回答
0

我遇到了同样的问题(几年后),我不能使用将 & 转换为 & 等的建议方法,因为一些被引入的文本字段包括 HTML 编码字符——而且不可能知道字段的原始文本是否包含标签或标签的编码版本。

但是,我在使用 C# 的 HttpUtility.HtmlDecode 的 Web 服务和数据流任务之间使用脚本任务方面取得了很大成功 - > 如果您正在处理可能的原始文本,它只是无助于保留编码字符串包含那些编码字符。

于 2019-05-20T23:21:40.867 回答
0

您可以使用“脚本任务”控件

并使用替换原始字符。

public void Main()
    {
        // TODO: Add your code here
        Dts.Variables["User::SchoolData"].Value = Dts.Variables["User::SchoolData"].Value.ToString().Replace("&lt;", "<").Replace("&gt;", ">");
        ConnectionManager cm = Dts.Connections["Student.xml"];
        var path = cm.ConnectionString;
        var textToWrite = (string)Dts.Variables["User::SchoolData"].Value;
        System.IO.File.WriteAllText(path, textToWrite);
        Dts.TaskResult = (int)ScriptResults.Success;
    }

例如,在这种情况下,我将 web 服务结果存储到“SchoolData”变量并替换它,然后将其写入“student.xml”这是我的场景: 在此处输入图像描述

于 2016-09-22T15:20:48.220 回答